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.
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
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 error | Pesan Lua | Tertangkap 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 ditutup | unfinished 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
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.
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.
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.
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.
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
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.
| Editor | Alat yang direkomendasikan | Metode instalasi | Real-time? |
|---|---|---|---|
| VS Code | lua-language-server (sumneko) | VS Code Marketplace | ✓ Ya |
| Neovim | lua-language-server + nvim-lspconfig | Manajer plugin | ✓ Ya |
| Vim | ALE + Luacheck | Manajer plugin | ✓ Ya |
| IntelliJ / Rider | Plugin EmmyLua | JetBrains Marketplace | ✓ Ya |
| Sublime Text | SublimeLinter-luacheck | Package Control | ✓ Ya |
| Emacs | flycheck + luacheck | MELPA | ✓ Ya |
Note
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().
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
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.
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.
- 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.
- Format sebelum meninjau - jalankan Lua Formatter untuk menormalisasi indentasi. Ini membuat kedalaman nesting langsung terlihat dan menghemat waktu saat tinjauan kode.
- 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.
- 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.
- 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
Memilih alat berdasarkan tugas
| Tugas | Alat terbaik |
|---|---|
| Pemeriksaan cepat tempel-dan-periksa (tanpa instalasi) | Lua Syntax Validator (online) |
| Pemeriksaan real-time saat menulis | lua-language-server di VS Code/Neovim |
| Lint proyek penuh + pemeriksaan global tidak terdefinisi | Luacheck CLI |
| Penegakan di pipeline CI/CD | Luacheck + luac -p |
| Analisis kode yang diminifikasi atau diobfuscate | Lua Deobfuscator Helper (online) |
| Format sebelum meninjau | Lua Formatter (online) |
| Diff dua versi skrip | Lua 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.
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.