diff --git a/README.md b/README.md index f8d66e4..058dc9a 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Provides intelligent editing features for fennel files. ## Quick Links * [Install](docs/manual.md#installation) * [Configuration](docs/manual.md#configuration) -* [Features](docs/feature-matrix.md) * [Packaging](docs/packaging.md) +* [Writing your own lint](docs/linting.md) ## License fennel-ls is licensed under the MIT license. See LICENSE for more info. diff --git a/TODO.md b/TODO.md index df25b96..e71d05d 100644 --- a/TODO.md +++ b/TODO.md @@ -1,8 +1,4 @@ # Wishlist of features -([X] = complete, [ ] = planned) - -My current goal is to work on completions a little bit more. -- [X] create a release refactor brainstorm: - [ ] get rid of `bytes` stuff and use "stack" everywhere @@ -23,15 +19,21 @@ refactor brainstorm: - [ ] make hovers look like (fn table.insert [t ?i v] ...) -Here is my feature wishlist. I don't expect to ever get all of this done, but these are the sort of enhancements I am thinking about. +Here is my feature wishlist. I don't expect to ever get all of this +done, but these are the sort of enhancements I am thinking about. + - [X] Able to connect to a client - [X] Support for UTF-8 characters that aren't just plain ASCII. (especially `λ`) (perhaps just tell the IDE that I want to communicate with utf-8 offsets) - [ ] People have tried fennel-ls in: - [X] Neovim (This project isn't a neovim plugin, but there are instructions on how to inform neovim of the fennel-ls binary once you build it.) - [X] emacs - [X] helix - - [ ] vscode (publish an extension) + - [X] vscode (publish an extension) - [ ] vim+coc (publish a node thingy) +- [ ] Improved global checks + - [ ] (or table.unpack _G.unpack) should be allowed on any Lua version +- [ ] generate man page +- [ ] load lints from external sources (sandboxed) - [x] Go-to-definition: - [X] literal table constructor - [X] table destructuring @@ -69,10 +71,10 @@ Here is my feature wishlist. I don't expect to ever get all of this done, but th - [X] Unused locals - [X] Unknown fields of modules - [ ] Discarding results from pcall/xpcall/other functions - - [.] `unpack` or `values` into a special + - [X] `unpack` or `values` into a special - [ ] `do`/`values` with only one inner form - - [ ] redundant `do` as the last/only item in a form that accepts a "body" - - [ ] `values`/`unpack` in a non tail position + - [X] redundant `do` as the last/only item in a form that accepts a "body" + - [X] `values`/`unpack` in a non tail position - [ ] numbers and strings in a non tail position - [ ] deprecated specials/macros - [X] `var` forms that could be `local` @@ -84,7 +86,6 @@ Here is my feature wishlist. I don't expect to ever get all of this done, but th - [ ] Code that matches the shape of `accumulate` or `icollect` or `collect`?? or other macros?? - [ ] Dead code (I'm not sure what sort of things cause dead code) - [ ] Unused fields (difficult) - - [ ] unification in a `match` pattern (difficult) - [ ] unused values in `λ` (difficult) - [ ] Brainstorm more linting patterns (I spent a couple minutes brainstorming these ideas, other ideas are welcome of course) - [ ] Type Checking @@ -103,11 +104,10 @@ Here is my feature wishlist. I don't expect to ever get all of this done, but th - [ ] global search across other files - [ ] Options / Configuration - [X] Configure over LSP - - [ ] Configure with some sort of per-project config file - - [ ] Configure with environment variables I guess?? + - [X] Configure with some sort of per-project config file - [X] fennel/lua path - - [ ] lua version - - [ ] allowed global list + - [X] lua version + - [X] allowed global list - [X] enable/disable various linters - [X] rename - [X] local symbols @@ -116,6 +116,33 @@ Here is my feature wishlist. I don't expect to ever get all of this done, but th - [ ] formatting with fnlfmt - [ ] Type annotations? Global type inference? +- [ ] external docsets + - [X] load external docsets from ~/.local/share/fennel-ls/docsets/ + - [X] warn on missing docset + - [ ] document how to download external docsets + - [ ] document how to create external docsets + - [ ] move love2d and tic80 to external docsets (published .... where?) + - [ ] automatic downloading of external docsets + - [ ] some kind of registry built-in? + +- [ ] discard input if there are more edits coming + +optional luaposix dependency for this? + +``` +local posix = require("posix") + +-- Function to set non-blocking mode for a file descriptor +local function setNonBlocking(fd) + local flags = posix.fcntl(fd, posix.F_GETFL, 0) + posix.fcntl(fd, posix.F_SETFL, flags + posix.O_NONBLOCK) +end + +-- Open stdin in non-blocking mode +setNonBlocking(0) -- 0 is the file descriptor for stdin + +print( io.read(0) and "Data in stdin" or "No data in stdin") +``` fn-arg-nil: Function arguments are assumed to be nil in a function body, until there's a type system to give more information. diff --git a/docs/linting.md b/docs/linting.md index 4e365c2..581d310 100644 --- a/docs/linting.md +++ b/docs/linting.md @@ -101,4 +101,4 @@ The return value should have these fields: * `codeDescription`: Use the name of your function. ### Testing: -I will think about this later. :) +I will think about this later. :) For now see examples in `test/lint.fnl`. diff --git a/docs/packaging.md b/docs/packaging.md index e193068..3a63fa7 100644 --- a/docs/packaging.md +++ b/docs/packaging.md @@ -3,6 +3,8 @@ Sorry packagers, I have committed two ultimate sins. 1. I checked in some generated code into my repository. 2. I have copied others' code into my repository, also known as "vendoring" code. +Debian packaging is at https://git.sr.ht/~technomancy/fennel-ls/log/debian/latest + ## Generated Code The files inside `src/fennel-ls/docs/generated/` are not hand-written, they are generated. The documentation embedded into `fennel-ls` needs to come from @@ -15,23 +17,12 @@ any licensing issue. I understand if you want to build from source instead of relying on the output. You can rebuild these by running `make rm-docs` to remove the docs, and -`make docs` to regenerate these files. +`make docs` to regenerate these files. However, this requires internet access. ```sh $ make rm-docs $ make docs ``` -## Including LÖVE documentation -Due to license incompatibility between fennel-ls and the official LÖVE -documentation, this repository cannot include the LÖVE documentation by -default. It must be generated manually. - -This can be done by passing a flag to the `docs` target. - -```sh -$ make docs GET_DOCS_FLAGS=--generate-love2d -``` - ## Vendored Dependencies The vendored dependencies are very easy to solve. You delete the dependency files by running `make rm-deps`.