TODO: Document how you can use make build_parser to automatically install
this for lua.
Tree sitter grammar for Lua built to be used inside of Neovim.
Goal: Make a super great Lua grammar and tailor it to usage for Neovim.
This grammar has a docgen module.
How to write emmy documentation
Write a lua script that looks like this:
localdocgen=require('docgen')
localdocs= {}
docs.test=function()
-- Filepaths that should generate docslocalinput_files= {
"./lua/telescope/init.lua",
"./lua/telescope/builtin/init.lua",
"./lua/telescope/pickers/layout_strategies.lua",
"./lua/telescope/actions/init.lua",
"./lua/telescope/previewers/init.lua",
}
-- Maybe sort them that depends what you want and needtable.sort(input_files, function(a, b)
return#a<#bend)
-- Output filelocaloutput_file="./doc/telescope.txt"localoutput_file_handle=io.open(output_file, "w")
for_, input_fileinipairs(input_files) dodocgen.write(input_file, output_file_handle)
endoutput_file_handle:write(" vim:tw=78:ts=8:ft=help:norl:\n")
output_file_handle:close()
vim.cmd[[checktime]]enddocs.test()
returndocsIt is suggested to use a minimal_init.vim. Example:
setrtp+=.
setrtp+=../plenary.nvim/setrtp+=../tree-sitter-lua/runtime!plugin/plenary.vimAfter that you can run docgen like this:
nvim --headless --noplugin -u scripts/minimal_init.vim -c "luafile ./scripts/gendocs.lua" -c 'qa'
OK, so here's what I'm thinking:
- We have tree sitter for Lua (that we wrote)
- Can use tree sitter + queries to get information about one file
- This is like, what a variable is in the file, where it's defined, references, etc.
- We can use "programming" to link up multiple files w/ our tree sitter info
- Use package.path, package.searchers, etc. to find where requires lead to.
- Now we have "project" level knowledge.
- Can give smarts based on those things.
ALSO!
We can cheat :) :) :)
Let's say we run our LSP in another neovim instance (just nvim --headless -c 'some stuff')
...
OK
this means we can ask vim about itself (and other globals, and your package.path, etc.)
Part 2 of cheating:
we can re-use vim.lsp in our implementation
- Grammar
- [ ]
- It helps if you made @vigoux the person he is today.
- (Not a firm requirement, but it's very helpful)
- Make a grammar.js and then be able to generate a parser.so
- Write a bunch of tests for the language and provide somethjing the other parser doesnt.
- Mine is mostly that it parses docs
- It also parses more specifically many aspects of the language for smarter highlighting (hopefully)
- I also like the names more
- To test with nvim-treesitter, you need to make a
lua.so(or whatever your filetype is) available somewhere in rtp in a folder calledparser.- Then you need to write the
.scmfiles, like highlight and all that good stuff.
- Then you need to write the
- ???
- Profit!