Lompat ke konten
Aback Tools Logo

Alat Pemeriksa Sintaks dan Error Lua Terbaik

Semua cara praktis untuk menemukan kesalahan sintaks dan kegagalan runtime Lua sebelum produksi - validator browser, linter CLI, dan integrasi editor dibandingkan.

DH
Tutorials & How-Tos13 menit baca2,700 kata

Sintaks minimal Lua adalah kekuatan sampai sebuah end yang hilang, tanda kurung yang tidak berpasangan, atau string yang tidak ditutup merusak skrip Anda secara diam-diam saat runtime. Berbeda dengan bahasa terkompilasi yang menangkap kesalahan sebelum eksekusi, Lua sering gagal di tengah jalan dengan nomor baris yang membingungkan tanpa konteks lebih lanjut. Panduan ini mencakup semua metode praktis untuk menangkap kesalahan sintaks dan kegagalan runtime Lua sebelum mencapai produksi - dari validator berbasis browser hingga linter CLI dan integrasi editor.

5.1-5.4Versi Lua yang didukungTermasuk LuaJIT & Luau
< 1 dtkWaktu pemeriksaan onlineTanpa instalasi
0 KBKode diunggahSemua pemeriksaan berjalan lokal

Mengapa pemeriksaan error Lua penting

Lua adalah bahasa skrip yang diinterpretasikan. Tidak ada langkah kompilasi yang menghentikan eksekusi ketika file rusak - interpreter hanya melempar error saat mencapai baris bermasalah saat runtime. Pada skrip game, file konfigurasi, atau modul server web, itu berarti bug bisa bersembunyi di jalur kode yang jarang dieksekusi dan muncul di momen terburuk.

Pemeriksa error Lua khusus menangkap masalah-masalah ini sebelum runtime dengan menganalisis kode sumber Anda secara statis. Ia memindai blok yang tidak ditutup, pembatas yang tidak berpasangan, string yang tidak ditutup, dan urutan token yang tidak valid - kesalahan yang langsung membuat parser Lua tersandung, apa pun data yang diproses skrip Anda.

Dua kategori error Lua

  • Kesalahan sintaks - masalah struktural yang ditolak parser sebelum eksekusi: end yang hilang, [[ yang tidak ditutup, ( yang tidak berpasangan, literal string yang tidak ditutup. Selalu menghasilkan nomor baris.
  • Kesalahan runtime - masalah logika yang hanya muncul saat eksekusi: pengindeksan nil, stack overflow, ketidakcocokan tipe, dan panggilan require() yang gagal. Butuh pengujian atau linter untuk terdeteksi lebih awal.

Pemeriksa sintaks menangani kategori pertama sepenuhnya. Deteksi kesalahan runtime memerlukan penganalisis statis yang lebih canggih seperti Luacheck, pengujian dinamis, atau tinjauan kode yang cermat. Alat-alat dalam panduan ini dikategorikan sesuai hal tersebut - sehingga Anda bisa memilih yang tepat untuk alur kerja Anda.

Note

Jika Anda bekerja dengan skrip Roblox Luau, aturan sintaks yang sama berlaku sebagian besar. Luau adalah superset dari Lua 5.1 dengan anotasi tipe tambahan - pemeriksa sintaks Lua standar mencakup subset yang sama, dan editor Roblox Studio menangani ekstensi khusus Luau secara native.

Kesalahan sintaks Lua yang umum dan bentuknya

Sebelum memilih alat, ada baiknya mengetahui kesalahan apa yang Anda cari. Kesalahan sintaks Lua terbagi dalam sekumpulan pola yang mudah dikenali dan mencakup sebagian besar kesalahan yang ditemui developer dalam praktik.

Kata kunci end yang hilang atau berlebih

Setiap blok if, for, while, repeat, do, dan function di Lua memerlukan end yang sesuai. Lupa satu di dalam struktur bersarang membuat pesan error Lua menjadi menyesatkan - sering kali error dilaporkan di akhir file, bukan di end yang sebenarnya hilang.

String panjang dan komentar yang tidak ditutup

Sintaks string panjang Lua ([[ ... ]]) dan komentar panjang (--[[ ... ]]) sangat ampuh tetapi tanpa ampun. [[ pembuka yang tidak berpasangan membuat interpreter mengonsumsi sisa file sebagai isi string, mengubah semua kode berikutnya menjadi literal - tidak ada error yang dilempar sampai akhir file tercapai tanpa ]] penutup.

Tanda kurung dan kurung biasa yang tidak berpasangan

Kurung biasa, kurawal, atau siku pembuka yang tidak berpasangan tertangkap saat parsing. Sederhana tetapi sulit ditemukan di konstruktor tabel yang panjang atau rantai panggilan fungsi. Validator sintaks menunjukkan baris persisnya - sesuatu yang jarang dicapai dengan cepat oleh inspeksi manual literal tabel sepanjang 200 baris.

Jenis errorPesan LuaTertangkap pemeriksa sintaks?
Kata kunci end hilang'<eof>' expected near '...'✓ Ya
String panjang [[ tidak ditutup']]' expected near '<eof>'✓ Ya
( tidak berpasangan')' expected near '...'✓ Ya
String tidak ditutupunfinished string near '...'✓ Ya
Indeks nil (runtime)attempt to index a nil value✗ Hanya runtime
Stack overflow (runtime)stack overflow✗ Hanya runtime
Tipe argumen salah (runtime)bad argument #1✗ Hanya runtime

Tip

Jika pesan error Anda menyebut eof expected atau near eof, masalahnya hampir selalu berupa blok yang tidak ditutup atau string panjang di suatu tempat di atas baris yang dilaporkan Lua. Mulailah mencari dari atas file, bukan dari bawah.

Pemeriksa error Lua online: cara tercepat untuk memvalidasi

Untuk pemeriksaan sekali cepat - cuplikan yang ditempel, file konfigurasi, atau skrip yang Anda terima dari orang lain - pemeriksa error Lua online adalah jalan tercepat menuju jawaban. Tanpa instalasi, tanpa penyiapan, tanpa konfigurasi proyek. Tempel kode Anda dan dapatkan hasil dalam waktu kurang dari satu detik.

1

Gunakan Lua Syntax Validator dari Aback Tools

Lua Syntax Validator dari Aback Tools memeriksa kode sumber Lua untuk masalah tingkat parser sepenuhnya di browser Anda. Tempel skrip Lua apa pun - dari satu fungsi hingga modul lengkap - dan ia memindai blok yang tidak ditutup, ketidakcocokan kurung, kesalahan terminasi string dan komentar, serta peringatan tingkat token. Hasilnya mencakup nomor baris yang terdampak dan deskripsi berbahasa sederhana tentang apa yang salah. Kode Anda tidak pernah meninggalkan perangkat Anda.

2

Format kode untuk mengungkap masalah struktur

Kesalahan indentasi sering kali tidak terlihat pada Lua yang formatnya buruk. Menjalankan skrip Anda melalui Lua Formatter sebelum memeriksa kesalahan dapat mengungkap masalah nesting yang tidak terlihat pada kode yang tidak sejajar - blok yang terlihat bersarang di layar tetapi sebenarnya berada di kedalaman yang salah menjadi jelas setelah indentasi ulang yang konsisten.

3

Bandingkan versi sebelum dan sesudah perbaikan

Saat Anda telah memperbaiki kesalahan sintaks dan ingin memastikan persis apa yang berubah, alat Lua Code Diff & Compare menampilkan diff baris demi baris antara dua file Lua. Ini sangat berguna saat tinjauan kode atau saat menerapkan perbaikan yang disarankan anggota tim.

Lua Syntax Validator

Tempel skrip Lua apa pun untuk mendeteksi blok yang tidak ditutup, kurung yang tidak berpasangan, string yang tidak ditutup, dan kesalahan tingkat parser lainnya - sepenuhnya di browser Anda, tanpa pendaftaran.

Open tool

Pemeriksa error Lua CLI: Luacheck dan interpreter Lua

Untuk alur kerja produksi, pipeline CI, dan proyek dengan banyak file Lua, alat baris perintah adalah pilihan yang tepat. Alat-alat ini terintegrasi dengan proses build Anda yang ada, menghasilkan keluaran yang dapat dibaca mesin, dan dapat memblokir deployment ketika kesalahan ditemukan.

Pemeriksaan bawaan interpreter: luac

Interpreter Lua sendiri adalah pemeriksa sintaks paling sederhana yang tersedia. Menjalankan luac -p script.lua (menggunakan compiler Lua dalam mode parse-only) akan mencetak setiap kesalahan sintaks dan keluar dengan kode status bukan nol. Ini tidak memerlukan alat tambahan - cukup instalasi Lua standar.

Luacheck - penganalisis statis standar industri

Luacheck adalah linter Lua yang paling banyak digunakan dan jauh melampaui pemeriksaan sintaks. Ia mendeteksi variabel yang tidak digunakan, global yang tidak terdefinisi, local yang tersembunyi, akses ke nilai yang belum diinisialisasi, dan masalah gaya. Ia mendukung Lua 5.1, 5.2, 5.3, 5.4, dan LuaJIT, serta dapat dikonfigurasi per proyek melalui file .luacheckrc.

Keluaran Luacheck mencakup nama file, nomor baris, kolom, tingkat keparahan (peringatan atau error), dan deskripsi. Ia terintegrasi dengan mulus ke GitHub Actions, GitLab CI, Jenkins, dan sistem CI lain mana pun yang membaca kode keluar.

Luacheck di pipeline CI

Tip

Flag --globals pada Luacheck memungkinkan Anda mendeklarasikan variabel global yang disediakan lingkungan Anda (API game engine, global framework, dll.) agar tidak dilaporkan sebagai tidak terdefinisi. Untuk skrip Roblox, deklarasikan game, workspace, script, dan global Roblox lainnya untuk menekan false positive.

Pemeriksaan bawaan LuaJIT

Jika proyek Anda menggunakan LuaJIT, perintah luajit -bl mengompilasi skrip menjadi bytecode tanpa mengeksekusinya - cara cepat untuk menemukan kesalahan parse di lingkungan khusus LuaJIT seperti OpenResty atau Nginx+Lua. Pesan error LuaJIT mencakup nama file dan nomor baris dan diformat sama seperti Lua standar.

Pemeriksaan error Lua di editor dan IDE

Waktu terbaik untuk menangkap kesalahan sintaks adalah saat Anda mengetiknya - sebelum menyimpan, sebelum menjalankan, sebelum deploy. Integrasi editor modern menyediakan tepat hal ini: garis bawah merah inline, pesan error saat hover, dan umpan balik real-time saat Anda menulis.

VS Code - lua-language-server (sumneko)

Ekstensi Lua de facto untuk VS Code adalah lua-language-server dari sumneko, tersedia sebagai "Lua" di VS Code Marketplace. Ia menyediakan pemeriksaan sintaks real-time, inferensi tipe, go-to-definition, dan diagnostik yang kompatibel dengan Luacheck. Ia mendukung Lua 5.1 hingga 5.4 dan LuaJIT, serta mencakup dukungan khusus untuk Roblox Luau ketika dipasangkan dengan ekstensi Roblox LSP.

  • Instalasi - cari "Lua" dari sumneko di panel ekstensi VS Code dan klik Install. Tidak perlu alat CLI tambahan.
  • Diagnostik - kesalahan sintaks, global tidak terdefinisi, kode yang tidak dapat dicapai, dan peringatan tipe muncul inline saat Anda mengetik.
  • Konfigurasi - buat .luarc.json di akar proyek Anda untuk mengatur versi Lua, mendeklarasikan global, dan mengonfigurasi aturan diagnostik.
  • Dukungan workspace - bekerja dengan file tunggal dan proyek multi-file; memahami require() antar file dalam folder workspace yang sama.

IntelliJ IDEA dan Rider - plugin EmmyLua

Untuk IDE JetBrains, plugin EmmyLua menambahkan dukungan Lua lengkap termasuk pemeriksaan kesalahan real-time, penyelesaian kode, refaktorisasi, dan dukungan debugging. Plugin ini sangat populer di studio pengembangan game yang menggunakan IDE berbasis IntelliJ untuk bahasa utamanya di samping lapisan skrip Lua.

Neovim / Vim

Pengguna Neovim dapat menghubungkan lua-language-server melalui klien LSP bawaan atau plugin seperti nvim-lspconfig. Pengguna Vim dapat menggunakan ALE (Asynchronous Lint Engine), yang mendukung Luacheck sebagai salah satu backend linting-nya dan menampilkan error di kolom tanda dan daftar quickfix.

EditorAlat yang direkomendasikanMetode instalasiReal-time?
VS Codelua-language-server (sumneko)VS Code Marketplace✓ Ya
Neovimlua-language-server + nvim-lspconfigManajer plugin✓ Ya
VimALE + LuacheckManajer plugin✓ Ya
IntelliJ / RiderPlugin EmmyLuaJetBrains Marketplace✓ Ya
Sublime TextSublimeLinter-luacheckPackage Control✓ Ya
Emacsflycheck + luacheckMELPA✓ Ya

Note

Semua integrasi editor yang tercantum di atas gratis dan open source. lua-language-server adalah opsi yang paling aktif dirawat dan pilihan terbaik untuk penyiapan baru di VS Code atau Neovim.

Membaca dan menafsirkan pesan error Lua

Bahkan dengan alat terbaik, suatu saat Anda akan melihat pesan error Lua mentah di file log atau terminal. Mengetahui cara membacanya dengan cepat adalah keterampilan yang menghemat waktu debugging yang signifikan - terutama di lingkungan runtime seperti OpenResty, game engine, atau sistem tertanam tempat keluaran log adalah satu-satunya visibilitas Anda.

Anatomi pesan error Lua

Setiap error Lua mengikuti pola ini: file sumber, baris tempat kesalahan terdeteksi, dan pesan yang menjelaskan apa yang ditemukan parser atau runtime. Untuk kesalahan sintaks, nomor barisnya dapat diandalkan. Untuk kesalahan runtime yang melibatkan nil atau ketidakcocokan tipe, baris menunjuk ke tempat error dilempar - yang bisa berada di dalam fungsi pustaka, bukan di kode Anda sendiri.

Stack trace di Lua

Ketika error merambat melalui beberapa panggilan fungsi, fungsi debug.traceback() Lua menghasilkan tumpukan panggilan lengkap. Sebagian besar framework (OpenResty, LÖVE2D, dan lainnya) secara otomatis menyertakannya dalam keluaran error mereka. Membaca traceback dari bawah ke atas memberi Anda urutan panggilan yang menyebabkan error.

Pesan error biasanya berupa string, tetapi bisa berupa nilai apa pun - tabel, angka, atau apa pun yang kode Anda lempar dengan error().

- Manual Referensi Lua 5.4

Menggunakan Lua Deobfuscator Helper untuk trace error yang diminifikasi

Jika skrip Anda telah diminifikasi atau diobfuscate (umum pada modul Lua yang didistribusikan dan plugin game), stack trace menunjuk ke nama variabel yang tidak bermakna dan baris yang dipadatkan. Lua Deobfuscator Helper dapat memulihkan keterbacaan pola obfuscation yang umum - membantu Anda memetakan kembali trace error yang kacau ke struktur kode aslinya.

Warning

Jangan pernah hanya mengandalkan nomor baris dalam pesan error Lua ketika file telah diminifikasi. Minifier memadatkan beberapa baris logis menjadi satu, sehingga baris 1 pada file yang diminifikasi bisa mewakili ratusan baris pada kode sumber aslinya.

Pemeriksaan error Lua berdasarkan lingkungan

Lua berjalan dalam konteks yang sangat berbeda - game engine, server web, sistem tertanam, alat baris perintah. Strategi pemeriksaan yang tepat bergantung pada lingkungan runtime Anda, karena masing-masing memiliki namespace global, pustaka runtime, dan format keluaran error yang berbeda.

Roblox Studio (Luau)

Editor skrip bawaan Roblox Studio menyediakan pemeriksaan sintaks real-time untuk Luau. Jendela Output menampilkan error runtime dengan nomor baris dan tumpukan panggilan lengkap. Untuk pemeriksaan offline, validator sintaks Lua standar bekerja untuk subset yang kompatibel dengan Lua 5.1. Jika Anda melindungi skrip Roblox, Lua Obfuscator mendukung sintaks Lua standar yang digunakan di sebagian besar skrip game Roblox.

LÖVE2D (Love)

LÖVE2D menampilkan layar error yang terformat ketika kesalahan sintaks atau runtime Lua dilempar, menampilkan pesan error, nama file, nomor baris, dan traceback. CLI luacheck dengan flag --std love menambahkan fungsi global LÖVE2D ke daftar global yang dikenal, menghilangkan false positive untuk panggilan love.*.

OpenResty / Nginx+Lua

Di OpenResty, error Lua muncul di log kesalahan Nginx. Kesalahan sintaks menyebabkan proses worker menolak untuk memulai; kesalahan runtime muncul di level log warn atau error selama pemrosesan permintaan. LuaJIT adalah runtime Lua di OpenResty, sehingga luajit -bl adalah perintah pemeriksaan parse yang tepat untuk skrip OpenResty.

Lua tertanam (host C/C++)

Ketika Lua tertanam dalam aplikasi C atau C++, kesalahan muncul melalui nilai kembalian lua_pcall dan pesan error pada stack Lua. Pemeriksaan sintaks sebelum deployment sangat penting di sini karena penanaman membuat iterasi cepat lebih sulit - pemeriksaan luac -p dalam skrip build Anda adalah pengaman yang tepat.

Lua Formatter

Indentasi dan format skrip Lua apa pun secara otomatis di browser Anda. Pemformatan yang konsisten mengungkap kesalahan nesting yang tidak terlihat pada kode yang tidak sejajar.

Open tool

Alur kerja pemeriksaan error Lua yang praktis

Pendekatan yang paling efektif menggabungkan beberapa lapisan pemeriksaan: validator online yang cepat untuk inspeksi sewaktu-waktu, integrasi editor untuk umpan balik real-time saat menulis, dan linter CLI di pipeline CI Anda untuk mencegah regresi. Berikut cara menyiapkan ketiganya tanpa menambah gesekan pada alur kerja harian Anda.

  1. Tempel dan validasi online terlebih dahulu - untuk skrip apa pun yang tidak Anda yakini, masukkan ke Lua Syntax Validator sebelum melakukan hal lain. Hanya butuh tiga detik dan memberi tahu Anda apakah file tersebut layak secara struktural.
  2. Format sebelum meninjau - jalankan Lua Formatter untuk menormalisasi indentasi. Ini membuat kedalaman nesting langsung terlihat dan menghemat waktu saat tinjauan kode.
  3. Instal lua-language-server di editor Anda - ini menangkap kesalahan saat Anda mengetik, sebelum Anda menyimpan file. Tanpa biaya dan tanpa konfigurasi proyek untuk memulai.
  4. Tambahkan Luacheck ke pipeline CI Anda - satu perintah luacheck src/ dalam konfigurasi CI Anda memblokir merge yang memperkenalkan global tidak terdefinisi, variabel tidak digunakan, atau kesalahan sintaks.
  5. Tinjau diff dengan alat diff Lua - saat menerapkan patch atau meninjau PR, gunakan alat Lua Code Diff & Compare untuk melihat persis apa yang berubah dan memastikan tidak ada kesalahan yang diperkenalkan.

Tip

Jika Anda baru mengenal codebase Lua, jalankan Luacheck pada seluruh direktori src/ terlebih dahulu. Keluarannya memberi Anda peta instan dari semua global yang tidak terdefinisi, yang memberi tahu Anda pustaka eksternal dan API lingkungan apa yang dibutuhkan proyek - sering lebih cepat daripada membaca dokumentasi.

Memilih alat berdasarkan tugas

TugasAlat terbaik
Pemeriksaan cepat tempel-dan-periksa (tanpa instalasi)Lua Syntax Validator (online)
Pemeriksaan real-time saat menulislua-language-server di VS Code/Neovim
Lint proyek penuh + pemeriksaan global tidak terdefinisiLuacheck CLI
Penegakan di pipeline CI/CDLuacheck + luac -p
Analisis kode yang diminifikasi atau diobfuscateLua Deobfuscator Helper (online)
Format sebelum meninjauLua Formatter (online)
Diff dua versi skripLua Code Diff & Compare (online)

Lua Code Diff & Compare

Tempel dua versi file Lua berdampingan dan lihat diff yang jelas di tingkat baris - berguna setelah menerapkan perbaikan sintaks atau meninjau patch.

Open tool

Key takeaways

  • Kesalahan sintaks Lua (end yang hilang, [[ yang tidak ditutup, kurung yang tidak berpasangan) tertangkap oleh pemeriksa statis sebelum runtime - tidak perlu mengeksekusi skrip untuk menemukannya.
  • Lua Syntax Validator dari Aback Tools memeriksa skrip apa pun di browser Anda dalam waktu kurang dari satu detik, tanpa instalasi dan tanpa unggahan.
  • Luacheck adalah opsi CLI yang paling andal - menangkap kesalahan sintaks, global tidak terdefinisi, variabel tidak digunakan, dan lainnya, serta terintegrasi dengan semua sistem CI utama.
  • lua-language-server (sumneko) adalah integrasi terbaik untuk VS Code dan Neovim, menyediakan diagnostik inline real-time saat Anda menulis.
  • Membaca pesan error Lua mengikuti pola yang konsisten: [file]:[baris]: [pesan] - kesalahan runtime bisa menunjuk ke dalam kode pustaka, jadi baca traceback lengkapnya.
  • Alur kerja yang tepat menumpuk tiga alat: validator online untuk pemeriksaan cepat, LSP editor untuk umpan balik langsung, dan linter CLI di CI untuk menegakkan kualitas pada setiap commit.
  • Lingkungan itu penting - Roblox Luau, LÖVE2D, OpenResty, dan Lua tertanam semuanya memiliki global yang berbeda; konfigurasikan linter Anda dengan standar yang benar untuk menghindari false positive.

Pertanyaan yang sering diajukan

The fastest option is the Lua Syntax Validator on Aback Tools. Paste your script and the tool reports every parser-level error - missing end keywords, unclosed brackets, unterminated strings - in under a second. No install, no account, and your code never leaves your browser. This is ideal for quick spot-checks on snippets, config files, and scripts received from other developers.

A Lua syntax checker detects parser-level errors: the structural problems that Lua's interpreter would reject before executing a single line of code. This includes missing or extra `end` keywords, unclosed long strings ([[...]] syntax), unmatched parentheses or brackets, and unterminated string literals. It does not detect runtime errors like nil indexing or type mismatches - those require either a more advanced static analyser (Luacheck) or actual execution.

Luacheck is a static analyser for Lua that goes beyond syntax checking. In addition to catching syntax errors, it identifies undefined global variables, unused local variables, values that are assigned but never read, shadowed locals, and stylistic issues. It supports Lua 5.1 through 5.4 and LuaJIT, and is configured via a .luacheckrc file. Luacheck is the standard choice for production Lua projects and CI pipelines.

Install the 'Lua' extension by sumneko from the VS Code Marketplace. This extension bundles the lua-language-server, which provides real-time syntax checking, undefined-global warnings, and type inference as you type. Errors appear as red underlines inline in the editor and in the Problems panel. No additional CLI tools are required - the language server runs automatically when you open a .lua file.

This is most commonly caused by an unclosed long string ([[...]]). When Lua encounters an opening [[ without a matching ]], it treats everything after it as string content - including all subsequent code. The parser does not see an error until it reaches the end of the file looking for ]] that never arrives. Check for unmatched [[ or --[[ above the line Lua reports, not below it.

Luacheck works for the Lua 5.1-compatible subset of Luau. Most Roblox game scripts use standard Lua syntax and are checked correctly. However, Luau-specific type annotations (a:Type syntax) and some newer Luau features may produce false errors in Luacheck. Declare Roblox globals like game, workspace, script, and Instance using the --globals flag or a .luacheckrc file to suppress false positives for built-in Roblox APIs.

Yes. OpenResty runs LuaJIT, which uses Lua 5.1-compatible syntax. The luajit -bl command checks any Lua file for syntax errors in parse-only mode without executing it - ideal for pre-deployment checks. Alternatively, luacheck with a .luacheckrc that declares OpenResty's ngx global and other nginx.* APIs catches both syntax errors and undefined-global warnings specific to the OpenResty environment.

A syntax error is detected by the Lua parser before any code runs - it means the source file is structurally invalid (malformed block, bad token, unterminated string). A runtime error occurs during execution when the code is syntactically valid but attempts an illegal operation - indexing nil, calling a non-function, passing the wrong type. Syntax checkers catch the first category; runtime errors require testing, defensive pcall() wrappers, or a more advanced type-aware static analyser.

ShareXLinkedIn