Update TODOs and other associated docs.

This commit is contained in:
Phil Hagelberg 2025-02-27 19:53:33 -08:00
parent 80b4f9d29a
commit aaf30a99be
4 changed files with 46 additions and 28 deletions

View File

@ -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.

55
TODO.md
View File

@ -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.

View File

@ -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`.

View File

@ -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`.