Provided by: lua-check_0.13.0-1_all bug

NAME

       luacheck - luacheck Documentation

       Contents:

LIST OF WARNINGS

       Warnings  produced  by  Luacheck  are  categorized  using three-digit warning codes. Warning codes can be
       displayed in CLI output using --codes CLI option or codes config option. Errors also have codes  starting
       with zero.

                                    ┌─────┬───────────────────────────────────────┐
                                    │Code │ Description                           │
                                    ├─────┼───────────────────────────────────────┤
                                    │011  │ A syntax error.                       │
                                    ├─────┼───────────────────────────────────────┤
                                    │021  │ An invalid inline option.             │
                                    ├─────┼───────────────────────────────────────┤
                                    │022  │ An upaired inline push directive.     │
                                    ├─────┼───────────────────────────────────────┤
                                    │023  │ An upaired inline pop directive.      │
                                    ├─────┼───────────────────────────────────────┤
                                    │111  │ Setting an undefined global variable. │
                                    ├─────┼───────────────────────────────────────┤
                                    │112  │ Mutating    an    undefined    global │
                                    │     │ variable.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │113  │ Accessing   an    undefined    global │
                                    │     │ variable.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │121  │ Setting a read-only global variable.  │
                                    ├─────┼───────────────────────────────────────┤
                                    │122  │ Mutating a read-only global variable. │
                                    ├─────┼───────────────────────────────────────┤
                                    │131  │ Unused   implicitly   defined  global │
                                    │     │ variable.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │211  │ Unused local variable.                │
                                    ├─────┼───────────────────────────────────────┤
                                    │212  │ Unused argument.                      │
                                    ├─────┼───────────────────────────────────────┤
                                    │213  │ Unused loop variable.                 │
                                    ├─────┼───────────────────────────────────────┤
                                    │221  │ Local variable is accessed but  never │
                                    │     │ set.                                  │
                                    ├─────┼───────────────────────────────────────┤
                                    │231  │ Local   variable  is  set  but  never │
                                    │     │ accessed.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │232  │ An  argument   is   set   but   never │
                                    │     │ accessed.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │233  │ Loop   variable   is  set  but  never │
                                    │     │ accessed.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │311  │ Value assigned to a local variable is │
                                    │     │ unused.                               │
                                    ├─────┼───────────────────────────────────────┤
                                    │312  │ Value of an argument is unused.       │
                                    ├─────┼───────────────────────────────────────┤
                                    │313  │ Value of a loop variable is unused.   │
                                    └─────┴───────────────────────────────────────┘

                                    │321  │ Accessing     uninitialized     local │
                                    │     │ variable.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │411  │ Redefining a local variable.          │
                                    ├─────┼───────────────────────────────────────┤
                                    │412  │ Redefining an argument.               │
                                    ├─────┼───────────────────────────────────────┤
                                    │413  │ Redefining a loop variable.           │
                                    ├─────┼───────────────────────────────────────┤
                                    │421  │ Shadowing a local variable.           │
                                    ├─────┼───────────────────────────────────────┤
                                    │422  │ Shadowing an argument.                │
                                    ├─────┼───────────────────────────────────────┤
                                    │423  │ Shadowing a loop variable.            │
                                    ├─────┼───────────────────────────────────────┤
                                    │431  │ Shadowing an upvalue.                 │
                                    ├─────┼───────────────────────────────────────┤
                                    │432  │ Shadowing an upvalue argument.        │
                                    ├─────┼───────────────────────────────────────┤
                                    │433  │ Shadowing an upvalue loop variable.   │
                                    ├─────┼───────────────────────────────────────┤
                                    │511  │ Unreachable code.                     │
                                    ├─────┼───────────────────────────────────────┤
                                    │512  │ Loop can be executed at most once.    │
                                    ├─────┼───────────────────────────────────────┤
                                    │521  │ Unused label.                         │
                                    ├─────┼───────────────────────────────────────┤
                                    │531  │ Left-hand side of  an  assignment  is │
                                    │     │ too short.                            │
                                    ├─────┼───────────────────────────────────────┤
                                    │532  │ Left-hand  side  of  an assignment is │
                                    │     │ too long.                             │
                                    ├─────┼───────────────────────────────────────┤
                                    │541  │ An empty do end block.                │
                                    ├─────┼───────────────────────────────────────┤
                                    │542  │ An empty if branch.                   │
                                    ├─────┼───────────────────────────────────────┤
                                    │551  │ An empty statement.                   │
                                    └─────┴───────────────────────────────────────┘

   Global variables
       For each file, Luacheck builds list of defined globals which can be used there. By default  only  globals
       from  Lua standard library are defined; custom globals can be added using --globals CLI option or globals
       config option, and version of standard library can be selected using  --std  CLI  option  or  std  config
       option. When an undefined global is set, mutated or accessed, Luacheck produces a warning.

   Read-only globals
       By  default,  all  standard  globals  except  _G  and package are marked as read-only, so that setting or
       mutating them produces a warning. Custom read-only globals can be added using --read-globals  CLI  option
       or read_globals config option.

   Implicitly defined globals
       Luacheck  can  be configured to consider globals assigned under some conditions to be defined implicitly.
       When -d/--allow_defined CLI option or allow_defined config option is used,  all  assignments  to  globals
       define  them;  when  -t/--allow_defined_top  CLI  option  or  allow_defined_top  config  option  is used,
       assignments to globals in the top level function scope (also known as main chunk) define them. A  warning
       is produced when an implicitly defined global is not accessed anywhere.

   Modules
       Files can be marked as modules using -m/--module CLI option or module config option to simulate semantics
       of the deprecated module function. Globals implicitly defined inside a module are considired part of  its
       interface,  are  not visible outside and are not reported as unused. Assignments to other globals are not
       allowed, even to defined ones.

   Unused variables and values
       Luacheck generates warnings for all unused local variables except one named _. It also detects  variables
       which are set but never accessed or accessed but never set.

   Unused values and uninitialized variables
       For each value assigned to a local variable, Luacheck computes set of expressions where it could be used.
       Warnings are produced for unused values  (when  a  value  can't  be  used  anywhere)  and  for  accessing
       uninitialized  variables  (when  no  values can reach an expression). E.g. in the following snippet value
       assigned to foo on line 1 is unused, and variable bar is uninitialized on line 9:

          local foo = expr1()
          local bar

          if condition() then
             foo = expr2()
             bar = expr3()
          else
             foo = expr4()
             print(bar)
          end

          return foo, bar

   Secondary values and variables
       Unused value assigned to a local variable is secondary if its origin is the  last  item  on  the  RHS  of
       assignment,  and another value from that item is used. Secondary values typically appear when result of a
       function call is put into locals, and only some of them are later used. For example, here value  assigned
       to b is secondary, value assigned to c is used, and value assigned to a is simply unused:

          local a, b, c = f(), g()

          return c

       A  variable  is  secondary  if  all  values  assigned  to  it are secondary. In the snippet above, b is a
       secondary variable.

       Warnings related to unused secondary values and variables can be removed using -s/--no-unused-secondaries
       CLI option or unused_secondaries config option.

   Shadowing declarations
       Luacheck  detects declarations of local variables shadowing previous declarations, unless the variable is
       named _. If the previous declaration is in the same scope as the new one, it is called redefining.

       Note that it is not necessary to define a new local variable when overwriting an argument:

          local function f(x)
             local x = x or "default" -- bad
          end

          local function f(x)
             x = x or "default" -- good
          end

   Control flow and data flow issues
       The following control flow and data flow issues are detected:

       • Unreachable code and loops that can be executed at most once (e.g. due to an unconditional break);

       • Unused labels;

       • Unbalanced assignments;

       • Empty blocks.

       • Empty statements (semicolons without preceding statements).

COMMAND LINE INTERFACE

       luacheck program accepts files, directories and rockspecs as arguments.

       • Given a file, luacheck will check it.

       • Given -, luacheck will check stdin.

       • Given a directory, luacheck will check all files within it, selecting only files  with  .lua  extension
         unless  --include-files option is used. This feature requires LuaFileSystem (installed automatically if
         LuaRocks was used to install Luacheck).

       • Given a rockspec (a file with .rockspec extension), luacheck will check all files with  .lua  extension
         mentioned in the rockspec in build.install.lua, build.install.bin and build.modules tables.

       The output of luacheck consists of separate reports for each checked file and ends with a summary:

          $ luacheck src
          Checking src/bad_code.lua                         5 warnings

              src/bad_code.lua:3:16: unused variable helper
              src/bad_code.lua:3:23: unused variable length argument
              src/bad_code.lua:7:10: setting non-standard global variable embrace
              src/bad_code.lua:8:10: variable opt was previously defined as an argument on line 7
              src/bad_code.lua:9:11: accessing undefined variable hepler

          Checking src/good_code.lua                        OK
          Checking src/python_code.lua                      1 error

              src/python_code.lua:1:6: expected '=' near '__future__'

          Checking src/unused_code.lua                      9 warnings

              src/unused_code.lua:3:18: unused argument baz
              src/unused_code.lua:4:8: unused loop variable i
              src/unused_code.lua:5:13: unused variable q
              src/unused_code.lua:7:11: unused loop variable a
              src/unused_code.lua:7:14: unused loop variable b
              src/unused_code.lua:7:17: unused loop variable c
              src/unused_code.lua:13:7: value assigned to variable x is unused
              src/unused_code.lua:14:1: value assigned to variable x is unused
              src/unused_code.lua:22:1: value assigned to variable z is unused

          Total: 14 warnings / 1 error in 4 files

       luacheck exits with 0 if no warnings or errors occured and with a positive number otherwise.

   Command line options
       Short  options that do not take an argument can be combined into one, so that -qqu is equivalent to -q -q
       -u. For long options, both --option value or --option=value can be used.

       Options taking several arguments can be used several times; --ignore foo --ignore bar  is  equivalent  to
       --ignore foo bar.

       Note  that  options  that  may  take several arguments, such as --globals, should not be used immediately
       before positional arguments; given --globals foo bar file.lua, luacheck will consider all  foo,  bar  and
       file.lua global and then panic as there are no file names left.

                     ┌────────────────────────────────────┬───────────────────────────────────────┐
                     │Option                              │ Meaning                               │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-g | --no-global                    │ Filter out warnings related to global │
                     │                                    │ variables.                            │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-u | --no-unused                    │ Filter out warnings related to unused │
                     │                                    │ variables and values.                 │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-r | --no-redefined                 │ Filter   out   warnings   related  to │
                     │                                    │ redefined variables.                  │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-a | --no-unused-args               │ Filter out warnings related to unused │
                     │                                    │ arguments and loop variables.         │
                     └────────────────────────────────────┴───────────────────────────────────────┘

                     │-s | --no-unused-secondaries        │ Filter out warnings related to unused │
                     │                                    │ variables  set  together  with   used │
                     │                                    │ ones.                                 │
                     │                                    │                                       │
                     │                                    │ See secondaryvaluesandvariables       │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--no-self                           │ Filter   out   warnings   related  to │
                     │                                    │ implicit self argument.               │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--std <std>                         │ Set standard globals.  <std>  can  be │
                     │                                    │ one of:                               │
                     │                                    │                                       │
                     │                                    │        • _G  -  globals  of  the  Lua │
                     │                                    │          interpreter luacheck runs on │
                     │                                    │          (default);                   │
                     │                                    │                                       │
                     │                                    │        • lua51 - globals of Lua 5.1;  │
                     │                                    │                                       │
                     │                                    │        • lua52 - globals of Lua 5.2;  │
                     │                                    │                                       │
                     │                                    │        • lua52c  - globals of Lua 5.2 │
                     │                                    │          compiled                with │
                     │                                    │          LUA_COMPAT_ALL;              │
                     │                                    │                                       │
                     │                                    │        • lua53 - globals of Lua 5.3;  │
                     │                                    │                                       │
                     │                                    │        • lua53c  - globals of Lua 5.3 │
                     │                                    │          compiled                with │
                     │                                    │          LUA_COMPAT_5_2;              │
                     │                                    │                                       │
                     │                                    │        • luajit  -  globals of LuaJIT │
                     │                                    │          2.0;                         │
                     │                                    │                                       │
                     │                                    │        • ngx_lua   -    globals    of │
                     │                                    │          Openresty   lua-nginx-module │
                     │                                    │          with LuaJIT 2.0;             │
                     │                                    │                                       │
                     │                                    │        • min   -   intersection    of │
                     │                                    │          globals  of Lua 5.1, Lua 5.2 │
                     │                                    │          and LuaJIT 2.0;              │
                     │                                    │                                       │
                     │                                    │        • max - union  of  globals  of │
                     │                                    │          Lua  5.1, Lua 5.2 and LuaJIT │
                     │                                    │          2.0;                         │
                     │                                    │                                       │
                     │                                    │        • busted -  globals  added  by │
                     │                                    │          Busted 2.0;                  │
                     │                                    │                                       │
                     │                                    │        • none - no standard globals.  │
                     │                                    │                                       │
                     │                                    │        See Sets of standard globals   │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--globals [<global>] ...            │ Add custom globals on top of standard │
                     │                                    │ ones.                                 │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--read-globals [<global>] ...       │ Add read-only globals.                │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--new-globals [<global>] ...        │ Set custom  globals.  Removes  custom │
                     │                                    │ globals added previously.             │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--new-read-globals [<global>] ...   │ Set    read-only   globals.   Removes │
                     │                                    │ read-only globals added previously.   │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-c | --compat                       │ Equivalent to --std max.              │
                     └────────────────────────────────────┴───────────────────────────────────────┘

                     │-d | --allow-defined                │ Allow defining globals implicitly  by │
                     │                                    │ setting them.                         │
                     │                                    │                                       │
                     │                                    │ See implicitlydefinedglobals          │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-t | --allow-defined-top            │ Allow  defining globals implicitly by │
                     │                                    │ setting them in the top level scope.  │
                     │                                    │                                       │
                     │                                    │ See implicitlydefinedglobals          │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-m | --module                       │ Limit   visibility   of    implicitly │
                     │                                    │ defined globals to their files.       │
                     │                                    │                                       │
                     │                                    │ See modules                           │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--ignore | -i <patt> [<patt>] ...   │ Filter    out    warnings    matching │
                     │                                    │ patterns.                             │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--enable | -e <patt> [<patt>] ...   │ Do not filter out  warnings  matching │
                     │                                    │ patterns.                             │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--only | -o <patt> [<patt>] ...     │ Filter   out  warnings  not  matching │
                     │                                    │ patterns.                             │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--no-inline                         │ Disable inline options.               │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--config <config>                   │ Path  to  custom  configuration  file │
                     │                                    │ (default: .luacheckrc).               │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--no-config                         │ Do  not  look up custom configuration │
                     │                                    │ file.                                 │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--filename <filename>               │ Use another filename in  output,  for │
                     │                                    │ selecting configuration overrides and │
                     │                                    │ for file filtering.                   │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--exclude-files <glob> [<glob>] ... │ Do not  check  files  matching  these │
                     │                                    │ globbing  patterns.  Recursive  globs │
                     │                                    │ such as **/*.lua are supported.       │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--include-files <glob> [<glob>] ... │ Do not check files not matching these │
                     │                                    │ globbing patterns.                    │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--cache [<cache>]                   │ Path   to   cache   file.   (default: │
                     │                                    │ .luacheckcache). See Caching          │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--no-cache                          │ Do not use cache.                     │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-j | --jobs                         │ Check  <jobs>  files   in   parallel. │
                     │                                    │ Requires LuaLanes.                    │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--formatter <formatter>             │ Use   custom  formatter.  <formatter> │
                     │                                    │ must be a module name or one of:      │
                     │                                    │                                       │
                     │                                    │        • TAP - Test Anything Protocol │
                     │                                    │          formatter;                   │
                     │                                    │                                       │
                     │                                    │        • JUnit - JUnit XML formatter; │
                     │                                    │                                       │
                     │                                    │        • plain        -        simple │
                     │                                    │          warning-per-line formatter;  │
                     │                                    │                                       │
                     │                                    │        • default      -      standard │
                     │                                    │          formatter.                   │
                     └────────────────────────────────────┴───────────────────────────────────────┘

                     │-q | --quiet                        │ Suppress   report  output  for  files │
                     │                                    │ without warnings.                     │
                     │                                    │                                       │
                     │                                    │        • -qq  -  Suppress  output  of │
                     │                                    │          warnings.                    │
                     │                                    │                                       │
                     │                                    │        • -qqq - Only output summary.  │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--codes                             │ Show warning codes.                   │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--ranges                            │ Show  ranges  of  columns  related to │
                     │                                    │ warnings.                             │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │--no-color                          │ Do not colorize output.               │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-v | --version                      │ Show  version  of  Luacheck  and  its │
                     │                                    │ dependencies and exit.                │
                     ├────────────────────────────────────┼───────────────────────────────────────┤
                     │-h | --help                         │ Show help and exit.                   │
                     └────────────────────────────────────┴───────────────────────────────────────┘

   Patterns
       CLI options --ignore, --enable and --only and corresponding config options allow filtering warnings using
       pattern matching on warning codes, variable names or both. If a pattern contains a slash, the part before
       slash  matches  warning code and the part after matches variable name. Otherwise, if a pattern contains a
       letter or underscore, it matches variable name. Otherwise, it matches warning code. E.g.:

                                   ┌────────┬───────────────────────────────────────┐
                                   │Pattern │ Matching warnings                     │
                                   ├────────┼───────────────────────────────────────┤
                                   │4.2     │ Shadowing declarations  of  arguments │
                                   │        │ or redefining them.                   │
                                   ├────────┼───────────────────────────────────────┤
                                   │.*_     │ Warnings  related to variables with _ │
                                   │        │ suffix.                               │
                                   ├────────┼───────────────────────────────────────┤
                                   │4.2/.*_ │ Shadowing declarations  of  arguments │
                                   │        │ with _ suffix or redefining them.     │
                                   └────────┴───────────────────────────────────────┘

       Unless  already  anchored,  patterns  matching  variable  names  are  anchored at both sides and patterns
       matching warning codes are anchored at their beginnings. This allows one to filter warnings  by  category
       (e.g. --only 1 focuses luacheck on global-related warnings).

   Sets of standard globals
       CLI  option  --stds  allows  combining  built-in  sets described above using +. For example, --std max is
       equivalent to --std=lua51+lua52+lua53. Leading plus  sign  adds  new  sets  to  default  one  instead  of
       replacing  it.  For  instance,  --std +busted is suitable for checking test files that use Busted testing
       framework. Custom sets of globals can be  defined  by  mutating  global  variable  stds  in  config.  See
       custom_stds

   Formatters
       CLI  option  --formatter allows selecting a custom formatter for luacheck output. A custom formatter is a
       Lua module returning a function with three arguments: report as returned by luacheck module (see report),
       array  of file names and table of options. Options contain values assigned to quiet, color, limit, codes,
       ranges and formatter options in CLI or config. Formatter function must return a string.

   Caching
       If LuaFileSystem is available, Luacheck can cache results of checking files. On subsequent  checks,  only
       files  which  have  changed  since  the  last  check will be rechecked, improving run time significantly.
       Changing options (e.g. defining additional globals) does not invalidate cache. Caching can be enabled  by
       using  --cache  <cache> option or cache config option. Using --cache without an argument or setting cache
       config option to true sets .luacheckcache as the cache file. Note that --cache must be  used  every  time
       luacheck is run, not on the first run only.

   Stable interface for editor plugins and tools
       Command-line  interface  of Luacheck can change between minor releases. Starting from 0.11.0 version, the
       following interface is guaranteed at least till 1.0.0 version, and should be used by tools using Luacheck
       output, e.g. editor plugins.

       • Luacheck should be started from the directory containing the checked file.

       • File can be passed through stdin using - as argument or using a temporary file. Real filename should be
         passed using --filename option.

       • Plain formatter should be used. It outputs one issue (warning or error) per line.

       • To get precise error location, --ranges option can be used. Each line starts with real filename (passed
         using  --filename),  followed  by  :<line>:<start_column>-<end_column>:, where <line> is line number on
         which issue occurred and <start_column>-<end_column> is inclusive range of columns of token related  to
         issue. Numbering starts from 1. If --ranges is not used, end column and dash is not printed.

       • To  get  warning  and  error  codes,  --codes  option  can  be  used.  For each line, substring between
         parentheses contains three digit issue code, prefixed with E for errors and W  for  warnings.  Lack  of
         such substring indicates a fatal error (e.g. I/O error).

       • The rest of the line is warning message.

       If compatibility with older Luacheck version is desired, output of luacheck --help can be used to get its
       version. If it contains string 0.<minor>.<patch>, where <minor> is at least 11 and patch is  any  number,
       interface described above should be used.

CONFIGURATION FILE

       luacheck  tries  to  load  configuration from .luacheckrc file in the current directory. If not found, it
       will look for it in the parent directory and so on, going up until it reaches file system root.  Path  to
       config  can  be set using --config option, in which case it will be used during recursive loading. Config
       loading can be disabled using --no-config flag.

       Config is simply a Lua script executed by luacheck. It may set various options by assigning to globals or
       by returning a table with option names as keys.

   Config options
                       ┌───────────────────┬──────────────────────────────┬─────────────────────┐
                       │Option             │ Type                         │ Default value       │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │color              │ Boolean                      │ true                │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │codes              │ Boolean                      │ false               │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │formatter          │ String or function           │ "default"           │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │cache              │ Boolean or string            │ false               │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │jobs               │ Positive integer             │ 1                   │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │exclude_files      │ Array of strings             │ {}                  │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │include_files      │ Array of strings             │ (Include all files) │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │global             │ Boolean                      │ true                │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │unused             │ Boolean                      │ true                │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │redefined          │ Boolean                      │ true                │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │unused_args        │ Boolean                      │ true                │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │unused_secondaries │ Boolean                      │ true                │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │self               │ Boolean                      │ true                │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │std                │ String  or  set  of standard │ "_G"                │
                       │                   │ globals                      │                     │
                       └───────────────────┴──────────────────────────────┴─────────────────────┘

                       │globals            │ Array of strings             │ {}                  │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │new_globals        │ Array of strings             │ (Do not overwrite)  │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │read_globals       │ Array of strings             │ {}                  │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │new_read_globals   │ Array of strings             │ (Do not overwrite)  │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │compat             │ Boolean                      │ false               │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │allow_defined      │ Boolean                      │ false               │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │allow_defined_top  │ Boolean                      │ false               │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │module             │ Boolean                      │ false               │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │ignore             │ Array   of   patterns   (see │ {}                  │
                       │                   │ patterns)                    │                     │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │enable             │ Array of patterns            │ {}                  │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │only               │ Array of patterns            │ (Do not filter)     │
                       ├───────────────────┼──────────────────────────────┼─────────────────────┤
                       │inline             │ Boolean                      │ true                │
                       └───────────────────┴──────────────────────────────┴─────────────────────┘

       An  example  of  a config which makes luacheck ensure that only globals from the portable intersection of
       Lua 5.1, Lua 5.2, Lua 5.3 and LuaJIT 2.0 are used, as well as disables detection of unused arguments:

          std = "min"
          ignore = {"212"}

   Custom sets of globals
       std option allows setting a custom standard set of globals using a table. In that table, string keys  are
       globals, and string in array part are read-only globals.

       Additionally,  custom  sets  can be given names by mutating global stds variable. For example, when using
       LPEG library, it makes sense to access its functions tersely using globals. In that case,  the  following
       config allows removing false positives related to global access easily:

          stds.lpeg = require "lpeg"

          local lpeg = require "lpeg"

          local function parse1(...)
             -- This function only uses lpeg functions as globals.
             local _ENV = lpeg
             -- luacheck: std lpeg
             local digit, space = R "09", S " "
             -- ...
          end

          local function parse2(...)
             -- This function uses lpeg functions as well as standard globals.
             local _ENV = setmetatable({}, {__index = function(_, k) return _ENV[k] or lpeg[k] end})
             -- luacheck: std +lpeg
             local digit, space = R "09", S " "
             local number = C(digit^1) / tonumber
             -- ...
          end

   Per-file and per-path overrides
       The  environment in which luacheck loads the config contains a special global files. When checking a file
       <path>, luacheck will override  options  from  the  main  config  with  entries  from  files[<path>]  and
       files[<parent_path>],  applying  entries  for  shorter  paths  first.  For  example, the following config
       re-enables detection of unused arguments only for files in src/dir, but not for  src/dir/myfile.lua,  and
       allows using Busted globals within spec/:

          std = "min"
          ignore = {"212"}
          files["src/dir"] = {enable = {"212"}}
          files["src/dir/myfile.lua"] = {ignore = {"212"}}
          files["spec"] = {std = "+busted"}

       Note that files table supports autovivification, so that

          files["myfile.lua"].ignore = {"212"}

       and

          files["myfile.lua"] = {ignore = {"212"}}

       are equivalent.

INLINE OPTIONS

       Luacheck supports setting some options directly in the checked files using inline configuration comments.
       An inline configuration comment starts with luacheck: label, possibly after some whitespace. The body  of
       the  comment  should  contain  comma separated options, where option invocation consists of its name plus
       space separated arguments. The following options are supported:

                             ┌───────────────────┬───────────────────────────────────────┐
                             │Option             │ Number of arguments                   │
                             ├───────────────────┼───────────────────────────────────────┤
                             │global             │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │unused             │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │redefined          │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │unused args        │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │unused secondaries │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │self               │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │compat             │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │module             │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │allow defined      │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │allow defined top  │ 0                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │std                │ 1                                     │
                             ├───────────────────┼───────────────────────────────────────┤
                             │globals            │ 0+                                    │
                             ├───────────────────┼───────────────────────────────────────┤
                             │new globals        │ 0+                                    │
                             ├───────────────────┼───────────────────────────────────────┤
                             │read globals       │ 0+                                    │
                             ├───────────────────┼───────────────────────────────────────┤
                             │new read globals   │ 0+                                    │
                             ├───────────────────┼───────────────────────────────────────┤
                             │ignore             │ 0+ (without arguments  everything  is │
                             │                   │ ignored)                              │
                             ├───────────────────┼───────────────────────────────────────┤
                             │enable             │ 1+                                    │
                             ├───────────────────┼───────────────────────────────────────┤
                             │only               │ 1+                                    │
                             └───────────────────┴───────────────────────────────────────┘

       Options  that  take  no  arguments  can  be prefixed with no to invert their meaning. E.g. --luacheck: no
       unused args disables unused argument warnings.

       Part of the file affected by inline option dependes on where it is placed. If there is any  code  on  the
       line  with  the  option,  only  that  line  is affected; otherwise, everthing till the end of the current
       closure is. In particular, inline options at the top of the file affect all of it:

          -- luacheck: globals g1 g2, ignore foo
          local foo = g1(g2) -- No warnings emitted.

          -- The following unused function is not reported.
          local function f() -- luacheck: ignore
             -- luacheck: globals g3
             g3() -- No warning.
          end

          g3() -- Warning is emitted as the inline option defining g3 only affected function f.

       For fine-grained control over inline option visibility use luacheck: push and luacheck: pop directives:

          -- luacheck: push ignore foo
          foo() -- No warning.
          -- luacheck: pop
          foo() -- Warning is emitted.

       Inline options can be completely disabled using --no-inline CLI option or inline config option.

LUACHECK MODULE

       Use local luacheck = require "luacheck" to import luacheck module. It contains the following functions:

       • luacheck.get_report(source): Given source string, returns analysis data (a table).

       • luacheck.process_reports(reports, options): Processes array of analysis reports  and  applies  options.
         reports[i]  uses  options,  options[i],  options[i][1],  options[i][2], ... as options, overriding each
         other in that order. Options table is a table with fields  similar  to  config  options;  see  options.
         Analysis reports with field fatal are ignored. process_reports returns final report, see Report format.

       • luacheck.check_strings(sources,  options): Checks array of sources using options, returns final report.
         Tables with field fatal within sources array are ignored.

       • luacheck.check_files(files, options): Checks array of files using options, returns final  report.  Open
         file handles can passed instead of filenames, in which case they will be read till EOF and closed.

       • luacheck.get_message(issue): Returns a string message for an issue, see Report format.

       luacheck._VERSION contains Luacheck version as a string in MAJOR.MINOR.PATCH format.

       Using luacheck as a function is equivalent to calling luacheck.check_files.

   Report format
       A  final  report  is  an  array  of file reports plus fields warnings, errors and fatals containing total
       number of warnings, errors and fatal errors, correspondingly.

       A file report is an array of issues (warnings or errors). If a fatal error occured while checking a file,
       its report will have fatal field containing error type.

       An  issue  is  a  table  with  field code indicating its type (see warnings), and fields line, column and
       end_column pointing to the source of the warning. name field may contain name of relate variable.  Issues
       of some types can also have additional fields:

                                    ┌──────┬───────────────────────────────────────┐
                                    │Codes │ Additional fields                     │
                                    ├──────┼───────────────────────────────────────┤
                                    │011   │ msg   field   contains  syntax  error │
                                    │      │ message.                              │
                                    ├──────┼───────────────────────────────────────┤
                                    │111   │ module    field    indicates     that │
                                    │      │ assignment  is to a non-module global │
                                    │      │ variable.                             │
                                    └──────┴───────────────────────────────────────┘

                                    │211   │ func  field  indicates  that   unused │
                                    │      │ variable is a function.               │
                                    ├──────┼───────────────────────────────────────┤
                                    │4..   │ prev_line   and   prev_column  fields │
                                    │      │ contain location of  the  overwritten │
                                    │      │ definition.                           │
                                    └──────┴───────────────────────────────────────┘

       Other fields may be present for internal reasons.

       This is documentation for 0.13.0 version of Luacheck, a linter for Lua.

AUTHOR

       Peter Melnichenko

COPYRIGHT

       2014 - 2016, Peter Melnichenko