• Stars
    star
    139
  • Rank 261,273 (Top 6 %)
  • Language
    Haskell
  • License
    GNU Lesser Genera...
  • Created about 9 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Linter for Garry's mod Lua.

glualint

glualint - Linter and pretty printer for Garry's Mod's variant of Lua.

Installing

  1. Download the latest version of glualint from the releases page OR compile it yourself. If you download for Linux, make sure to run the right version. Most computers will need the x86_64 version. Embedded systems like a Raspberry pi will need the aarch64-linux version.
  2. Place the glualint executable inside some folder.
  3. Add the folder you put glualint in to your PATH. How this is done differs per operating system. If you're not sure how to do this, please Google "Add to path <YOUR OS>".
  4. Make sure you restart any terminals or text editors you currently have open.

After performing these steps, you can run glualint from the terminal or let your text editor use it as your linter. Failing to specifically perform the third step will make glualint very unlikely to work.

Command line parameters

Parameter Description
--version Returns the version of glualint.
--config Set to a glualint.json file for glualint configuration. See "Configuring glualint".
--pretty-print Will pretty-print (re-structure/re-indent) all code given in stdin. When entering code in terminal, press Ctrl+D to finish the input.
--pretty-print-files As above but pretty-prints the specified file or directory instead of stdin.
--indentation='something' For pretty-print: indents all pretty-printed code with the given string. Four spaces by default, should probably some amount of tabs or spaces.
--stdin Process stdin instead of specified file or directory when linting.
--analyse-globals Show global variables/functions that this file defines.
--test For debugging: test whether glualint works correctly on the given files and/or folders. Tries to parse with the two available parsers, then pretty prints and tries to parse the pretty printed result. It will show errors when it fails.

Configuring glualint

glualint Allows some configuration. This is done through a file called glualint.json or .glualint.json. glualint looks for this file in three places (in order of priority)

  • The file you give to the --config parameter (when using the terminal)
  • Any folder above the file you're working in (e.g. the root of your project)
  • Your home folder, which is C:\users\yourusername\.glualint.json on Windows or /home/yourusername/.glualint.json on Unix.

Note: The file must either be called glualint.json or .glualint.json.

Example glualint.json with the default options:

{
    "lint_maxScopeDepth": 7,
    "lint_syntaxErrors": true,
    "lint_syntaxInconsistencies": true,
    "lint_deprecated": true,
    "lint_trailingWhitespace": true,
    "lint_whitespaceStyle": true,
    "lint_beginnerMistakes": true,
    "lint_emptyBlocks": true,
    "lint_shadowing": true,
    "lint_gotos": true,
    "lint_goto_identifier": true,
    "lint_doubleNegations": true,
    "lint_redundantIfStatements": true,
    "lint_redundantParentheses": true,
    "lint_duplicateTableKeys": true,
    "lint_profanity": true,
    "lint_unusedVars": true,
    "lint_unusedParameters": false,
    "lint_unusedLoopVars": false,
    "lint_inconsistentVariableStyle": false,
    "lint_spaceBetweenParens": false,
    "lint_spaceBetweenBrackets": false,
    "lint_spaceBetweenBraces": false,
    "lint_ignoreFiles": [],
    "lint_spaceBeforeComma": false,
    "lint_spaceAfterComma": false,
    "lint_maxLineLength": 0,

    "prettyprint_spaceBetweenParens": false,
    "prettyprint_spaceBetweenBrackets": false,
    "prettyprint_spaceBetweenBraces": false,
    "prettyprint_spaceEmptyParens": false,
    "prettyprint_spaceEmptyBraces": false,
    "prettyprint_spaceAfterLabel": false,
    "prettyprint_spaceBeforeComma": false,
    "prettyprint_spaceAfterComma": true,
    "prettyprint_semicolons": false,
    "prettyprint_cStyle": false,
    "prettyprint_removeRedundantParens": true,
    "prettyprint_minimizeParens": false,
    "prettyprint_assumeOperatorAssociativity": true,
    "prettyprint_rejectInvalidCode": false,
    "prettyprint_indentation": "    ",

    "log_format": "auto"
}

All options explained

Linter options

Option Description
lint_maxScopeDepth Maximum depth of scopes in your code. Any terrible scripter can build the most atrocious sideways code pyramids, usually without knowing. The number here is at which step the linter will start calling you out on it. Set to 0 if you're king Tut and want to disable it.
lint_syntaxErrors Whether syntax errors should be reported. This is off by default because gluac shows nicer syntax errors.
lint_syntaxInconsistencies Warn for syntax inconsistencies (using both && and and, that kind of stuff)
lint_deprecated Warn for deprecated functions. These functions are taken from the GMod wiki, don't blame me for the things that are on there.
lint_trailingWhitespace Warn for whitespace at the end of a line. Your editor should have an option to automatically trim trailing whitespace.
lint_whitespaceStyle Warn for bad whitespace behaviour (e.g. lack of spaces around operators and keywords)
lint_beginnerMistakes Warn for typical beginner mistakes (using self in non-metafunction, net.WriteEntity(LocalPlayer()) in a net message, using self.Weapon in a SWEP etc.)
lint_emptyBlocks Warn for empty blocks
lint_shadowing Warn for variable shadowing
lint_gotos Warn for inappropriate gotos (i.e. the ones not used to jump out of a double loop)
lint_goto_identifier Warn when goto is used as an identifier (e.g. a = {goto = 1}). This warning exists because goto being allowed as identifier is actually a bug. You should not be able to use goto like that for the same reason you're not allowed to use any other keyword as identifier.
lint_doubleNegations Warn for double negations (things like not (a == b))
lint_redundantIfStatements Warn for nested if-statements that can be combined with and
lint_redundantParentheses Warn for unneeded parentheses around expressions.
lint_duplicateTableKeys Warn for duplicate table keys (e.g. {a = 1, a = 2})
lint_profanity Warn for profanity (bitch, cock, cocks, cunt, dick, dicks, fuck, fucking, goddamnit, knob, knobs, motherfucker, nipple, shit)
lint_unusedVars Warn for variables that are never used
lint_unusedParameters Warn for function parameters that are never used. NOTE: Only has effect when lint_unusedVars is enabled!
lint_unusedLoopVars Warn for loop variables that are never used (for k,v in ...). NOTE: Only has effect when lint_unusedVars is enabled!
lint_ignoreFiles Files to ignore when linting. You can use glob patterns (e.g. "**.lua", "*.lua" or libraries/*.lua)
lint_inconsistentVariableStyle Whether to warn about inconsistent styles in naming local variables (e.g. lowercase and uppercase variables)
lint_spaceBetweenParens Whether to warn about there being spaces between parentheses. This option used to be named lint_spaceAfterParens. For backwards compatibility that option still works.
lint_spaceBetweenBrackets Whether to warn about there being spaces between brackets. This option used to be named lint_spaceAfterBrackets. For backwards compatibility that option still works.
lint_spaceBetweenBraces Whether to warn about there being spaces between braces. This option used to be named lint_spaceAfterBraces. For backwards compatibility that option still works.
lint_spaceBeforeComma Whether to warn about spaces before the comma. This option depends on prettyprint_spaceBeforeComma on whether the space is wanted.
lint_spaceAfterComma Whether to warn about spaces after the comma. This option depends on prettyprint_spaceAfterComma on whether the space is wanted.
lint_maxLineLength Warn for lines longer than the given number. Set to 0 to disable.

Pretty print options

These options affect the pretty printing functionality of glualint.

Option Description
prettyprint_spaceBetweenParens Put a space between all parentheses
prettyprint_spaceBetweenBrackets Put a space between all brackets
prettyprint_spaceBetweenBraces Put a space between all curly braces
prettyprint_spaceEmptyParens Put a space between empty parentheses (e.g. ( )). Only applies when prettyprint_spaceBetweenParens is set
prettyprint_spaceEmptyBraces Put a space between empty braces (e.g. { }). Only applies when prettyprint_spaceBetweenBraces is set
prettyprint_spaceAfterLabel Put a space after a ::label:: statement
prettyprint_semicolons Clutter the script with semicolons after every damn statement
prettyprint_cStyle Use C style operators and comments everywhere
prettyprint_indentation What to use for indentation. Any string is valid, but some amount of spaces or "\t" is recommended
prettyprint_spaceBeforeComma Whether to place a space before every comma
prettyprint_spaceAfterComma Whether to place a space after every comma
prettyprint_removeRedundantParens Whether to remove unnecessary parentheses (e.g. x = (1 + 2), if ((1) + (2) == 3) then)
prettyprint_minimizeParens Removes parentheses which are unnecessary due to operator precedence (e.g. (1 * 2) + 3). This option also removes redundant parameters, regardless of whether prettyprint_removeRedundantParens is enabled.
prettyprint_assumeOperatorAssociativity Only takes effect when prettyprint_minimizeParens is true. It decides whether parameters can be removed when the involved operators are assumed associative. Examples: a * (b * c), a and (b and c). This assumption is generally true, except for floating point numbers, where removing parentheses can actually change the outcome of the calculation. See Stack Overflow. This option is set to true by default, because the expectation is that this will not be problematic even if it affects your code. In a very rare case, this might cause trouble, though. You might want to consider turning this off if you have floating point code that heavily relies on evaluation order. You may also choose to leave this option on and ensure evaluation order by explicitly setting variables.
prettyprint_rejectInvalidCode Whether not to pretty print when the code is syntactically invalid

Other options

  • log_format: Decides how to format linter warnings and error messages. Possible values are "auto", "standard" and "github". The "github" output format is specifically designed for usage with GitHub actions. The default value is "auto", With "auto", the log format will be "github" when the environment variables GITHUB_ACTIONS and GITHUB_WORKFLOW are both present, and "standard" otherwise.

In-code directives

If you add a comment containing the text format: multiline, the next statement will be forced to be pretty printed as multiline. Example:

-- format: multiline
a = {1, 2, 3}

Will be turned into:

-- format: multiline
a = {
  1,
  2,
  3
}

Editor Plugins

Through community support, GLuaFixer is supported across a wide variety of popular editors.

Here's a list of plugins we recommend (PRs for more tools welcome!):

Sublime

Atom

VS Code

Vim

Reusable Workflow

You can easily run GLuaFixer in your own Workflows using the included Reusable Workflow.

Setup

To run GLuaFixer on all of your PRs, create a new file in your repository: .github/workflows/glualint.yml with the following contents:

name: GLuaFixer

on:
  pull_request:

jobs:
  Lint:
    uses: FPtje/GLuaFixer/.github/workflows/glualint.yml@master

Now, every time you make or update a PR, GLuaFixer will run and report any linting violations right on your PR!

Configuration

The GLuaFixer Workflow can be configured, too.

You have two options for configuration:

  • Include a file in your repository containing the GLuaFixer config
  • Upload your GLuaFixer config somewhere (gist.github.com, pastebin/hastebin, etc.)

Then, modify your Workflow like so:

name: GLuaLint

on:
  pull_request:

jobs:
  Lint:
    uses: FPtje/GLuaFixer/.github/workflows/glualint.yml@master
    with:
      config: "<link or relative path to config file>"

More Repositories

1

DarkRP

DarkRP, a non-serious roleplay gamemode for Garry's Mod.
Lua
459
star
2

darkrpmodification

This is the addon with which you can modify DarkRP. Do not edit DarkRP files, edit files in this addon instead.
Lua
122
star
3

FProfiler

Profiler for Garry's Mod.
Lua
103
star
4

miso-isomorphic-example

Minimalistic single page example of Miso's isomorphic feature.
Haskell
92
star
5

Sublime-GLua-Highlight

GMod Lua syntax highlighting for Sublime Text 2 and 3
Lua
48
star
6

Falcos-Prop-protection

Falco's prop protection
Lua
35
star
7

gmosh

Garry's mod workshop cli powertool. It should still work, but support has been dropped because of the effort required to compile the project
Python
33
star
8

miso-component-example

Simple component example
Haskell
30
star
9

MySQLite

Lua module for Garry's mod. Depends on MySQLOO or tmysql4.
Lua
22
star
10

gmcl_midi

Do you have a MIDI to USB cable? This module makes it possible to get MIDI events in Garry's mod! Not currently supported anymore.
C++
21
star
11

FSpectate

Spectate mod for Garry's Mod. Ripped from FAdmin.
Lua
12
star
12

AndroidGmod

Android interaction with Garry's mod!
Java
9
star
13

glualint-web

Online glualint linting. How cool is that?
Haskell
8
star
14

GModFunctional

Functional library for Garry's mod
Lua
7
star
15

miso-jswidget-example

Example of embedding arbitrary javascript widgets into Miso.
Haskell
7
star
16

UUAGC-Examples

Contains some guides and examples related to the Utrecht University Attribute Grammar Compiler (UUAGC)
6
star
17

SublimeLinter-contrib-glualint

Linter for Garry's Mod Lua plugin for Sublime Text 3
Python
5
star
18

vscode-semaphore-ci

Unofficial VS Code extension for interacting with Semaphore CI
TypeScript
5
star
19

GLuaParser

Out of date! Please use https://github.com/FPtje/GLuaFixer instead!
Haskell
4
star
20

linter-glualint

glualint linter plugin for Atom
CoffeeScript
4
star
21

DarkRPMotd

DarkRP MOTD page
3
star
22

simplerr

Simplifies syntax
Lua
2
star
23

falco-backup-drive

Program to automatically manage my backup drive
Haskell
2
star
24

DarkRPWikiGen

DarkRP's wiki generator, using pywikibot
Lua
2
star
25

DarkRPWikiGenerator

Wiki generator for DarkRP stubs
PHP
1
star
26

servant-client-ghcjs-test

Quick, dirty, manual copy paste hack to test servant-client-ghcjs
Haskell
1
star
27

FPtje

My profile
1
star
28

elm-marshall-example

Heavy WIP experimental project to have ghcjs and Elm live together in peace, or pieces.
Haskell
1
star
29

elm-marshall

Provide marshalling between Elm and ghcjs. Allows ghcjs to become Elm's IO monad.
Haskell
1
star