5.4 KiB
NAME
fennel-ls - Intelligent editing features for fennel files.
SYNOPSIS
fennel-ls [--lint filename] | [--fix filename] | [--help]
DESCRIPTION
This document has information on how to configure and use fennel-ls after you installed it.
OPTIONS
--lint filename [...filename] Prints diagnostics for the files given. A successful exit code indicates no problems were found.
fennel-ls --fix [-y] [filename] [...]
Run suggested fixes from linters on files.
--help Display usage summary.
With no arguments, it waits for Language Server Protocol messages on stdin.
fennel-ls can be used with no configuration beyond connecting it to your text editor, but if you are using external libraries you will need to add them to the configuration to get completions, documentation, and correct diagnostics.
If a docset is available for the library you are using:
- download it and place it in
~/.local/share/fennel-ls/docsets/ - create a
flsproject.fnlin the root directory of your project - add the docset to it, it must match the name of the file you downloaded,
without the
.luaextension:{:libraries {:library-name true}}
If a docset is not available, add the globals created by the library to the
extra-globals field, separated by spaces, so that they are not reported as
errors:
{:extra-globals "module1 module2 function1 function2"}
The rest of this document provides additional details on the configuration and usage of fennel-ls.
CONFIGURATION
fennel-ls can be configured by creating a file named flsproject.fnl in the
root of your project.
The default settings are below, you only need to provide the settings you want
to change. An empty table {} is a valid configuration and serves as a marker
to indicate where the project root is located.
{:fennel-path "./?.fnl;./?/init.fnl;src/?.fnl;src/?/init.fnl"
:macro-path "./?.fnl;./?/init-macros.fnl;./?/init.fnl;src/?.fnl;src/?/init-macros.fnl;src/?/init.fnl"
:lua-version "lua5.4"
:libraries {}
:extra-globals ""
:lints {:unused-definition true
:unknown-module-field true
:unnecessary-method true
:unnecessary-tset true
:unnecessary-do true
:redundant-do true
:match-should-case true
:bad-unpack true
:var-never-set true
:op-with-no-arguments true
:multival-in-middle-of-call true
:no-decreasing-comparison false}
-
extra-globals: Space separated list of allowed global identifiers that will be added to a set of predefined lua globals.These identifiers and any of their fields will be considered valid and won't produce diagnostics. Use this when importing a library for which documentation is not available.
-
version: One oflua5.1,lua5.2,lua5.3,lua5.4,intersection, orunion.intersectionrepresents the APIs that are available in every supported Lua version,unionrepresents APIs available in any version. -
libraries: This setting controls which extra documentation fennel-ls will load in your environment. Each entry in the table is the name of the library and a boolean,trueto enable the library.The name of the library is the name of a file that will be loaded from
~/.local/share/fennel-ls/docsets/after appending the.luaextension.For example, if the table contains
{:love2d true}the filelove2d.luawill be loaded from~/.local/share/fennel-ls/docsets/.The available docsets are listed on the Fennel wiki.
See the full docsets documentation for more information on how to find, install, or create docsets.
fennel-ls respects the XDG convention, so if you changed
$XDG_DATA_HOMEthe files will be loaded from the location you specified.
USAGE
Fennel-ls cannot tell the difference between a regular file and a macro file.
You can ask fennel-ls to treat your file as a macro file if the first line
exactly matches ;; fennel-ls: macro-file. Expect this to change at some point
in the future when I come up with a better way to specify which files are meant
to be macro files.
FEATURES
| Feature | Locals | Fields | Builtin Globals | Across Files | Builtins | Macros | User globals |
|---|---|---|---|---|---|---|---|
| Completions | [X] | [X] | [X] | [X] | [X] | [X] | [ ] |
| Hover | [X] | [X] | [X] | [X] | [X] | [X] | [ ] |
| Goto Definition | [X] | [X] | N/A | [X] | N/A | [ ] | [ ] |
| Rename | [X] | [ ] | N/A | [ ] | N/A | [ ] | [ ] |
| Goto Reference | [X] | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] |
Fennel-ls can report all fennel compiler errors, plus a few custom lints.
Unused locals will be flagged unless they begin or end with an underscore. If you have a local that is unused in your code but necessary for pattern matching purposes, it's recommended to put an underscore at the end. For example:
(case [1 1 2 3 5 8]
[a_ a_] (print "First two elements are equal"))
LICENSE
Copyright © 2023-2025, Released under the MIT/X11 license