Nvim-colorizer.lua: The fastest colorizer for neovim (and no dependencies too)
github.com
github.com
Tree-sitter - A New Parsing System For Programming Tools
"Developer tools that support multiple programming languages generally have very limited, regex-based code-analysis capabilities.
Tree-sitter is a new parsing system that aims to change this paradigm. It provides a uniform C API for parsing an ever-growing set of languages. It features high-performance incremental parsing and robust error recovery, which allow it to be used to parse code in real-time in a text editor.
We're in the process of integrating Tree-sitter into both GitHub.com and the Atom text editor, which will allow us to analyze code accurately and efficiently, paving the way for better syntax highlighting, code navigation, and refactoring." -- Here's an interesting talk about it: https://www.thestrangeloop.com/2018/tree-sitter---a-new-pars...
But for C++ it still seems like something libclang based is still better right?
Edit: I see there is a discussion on asynchronous highlighting work, what's the status on that?
Well, one is an existing syntax highlighter one can install and use now, the other is something new, we haven't seen, that might or might not come with the next release.
Does anybody use it atm on any editor?
https://marketplace.visualstudio.com/items?itemName=georgewf...
It works just fine, although it is not a massive improvement by any means, from the dev experience we have today.
I do not know if any editors are shipping with it yet.
GitHub semantic (go to definition, call graph) is powered by tree sitter wrapped in an Haskell analyzer.
The next version of Codemirror is using Lezer, a JS port of tree sitter.
I use tree sitter in a static analysis tool that runs on our internal repos (about 4000).
I think treesitter would be overkill for this, however, considering the size and ffi overhead involved and any speed improvement would be very minimal while increasing the complexity. Considering that we are only told what "lines" changed by neovim right now, it would be very difficult to improve on what I have right now.
I had seen mention of treesitter in the code, and I had no idea what it was, so thank you very much for enlightening me. I have a decent amount of experience writing pratt parsers and DFAs by hand, which will probably still be faster, but the incremental algorithm and other advanced features wouldn't come for free.
I had been looking for more advanced reading material on parsers (I was even thinking of emailing Donald Knuth to see if I could preview chapter 7's section on parsing), and also for parsers in some of those languages, so this is very nicely timed. I'm definitely going to be reading their papers and watching the talk.
Better to use a more established language than reinventing the wheel
https://github.com/raptorjit/raptorjit
Which makes it a very good pick for NeoVim. It basically means that the plugins are basically supported forever without the JIT being a moving target. NeoVim also supports Vimscript as an alternative.
However, I'm hoping to learn more about the internals of the JIT to see if I can take up some of the effort in progressing it. I have a very deep interest in Luajit for some reason. As long as people like me exist, it's not dead.
>almost identical to each other but different enough that a migration is unreasonable.
There's nothing unreasonable, and all versions of Lua mentioned are backwards compatible, so there's not even a problem about migrating. Going to a new version is as simple as installing it and running your program.
Not true. Each minor version of Lua tended to inject incompatibilities that can't be trivially resolved. Lua 5.2 had made a catastrophic change to the environment [1], and Lua 5.3 was less severe but there are subtle issues with integer-number conversions you won't ever want in your large codebase [2]. And that is not a theoretical matter, we had to stick to Lua 5.1 exactly due to the environment changes even though 64-bit integers would have made our codebase much cleaner. And Lua 5.1 and 5.2 are no longer supported [3] (though as you have said, LuaJit may be supported) despite of all remaining issues.
[1] https://www.lua.org/manual/5.2/manual.html#8
But otherwise many codebases do move up Lua versions (outside of LuaJit), it's not a Python 3 "wait 10 years", Perl 6 "Wait 20 years" situation/
Perl 6 requires the full p5 compatibility as far as I recall. It was designed to coexist.
Lua only provides some C preprocessor flags for partial backward compatibility.
I think adoption will remain pretty limited though, because plugin authors want to support vim and neo.
Yes.
> (it can be disabled at build time)
No, Lua is not optional in Neovim.