← Back to context

Comment by egberts1

4 months ago

Ive completed what is arguably the largest syntax highlighting: nftables v1.1.4 script file (and command script) for Vim/NeoVim.

Before that, I completed arguably the 2nd largest syntax highlighting: ISC Bind9 (most versions)

https://github.com/egberts/vim-syntax-nftables

https://github.com/egberts/vim-syntax-bind-named

My secret weapon was using a smaller highlighted syntax to project even faster completion of these larger syntax tree: EBNF

http://github.com/egberts/vim-syntax-ebnf

The real magic trick is that I used S-expression to pull up all the first-encounter/deeply-nested keywords touched to its Vim syntax 'nextgroup=', and region block-offs.

Basically said, I complied complex EBNF into Vimscript zeal and need for pure-deterministic LL(1) syntax tree. (Vim regex is weird, must order by largest static pattern first to most wildly wildcard pattern lastly within single regex string).

Rainbow nest braces, command/statement/keyword/unit/integer coloring.

For my next trick, I need to determine which route to go next (maybe HN can help me here).

- JetBrain's properitary LSP

- VSCode textmate LSP?

- treesitter

- or something more LSP mainstream, if any.

Kinda disappointed that there is no holy grail for both syntax-highlighting and autocompletion.

Was looking forward to adding hint-hover as well.

JetBrains language plugins don't really map well onto VSCode's idea of a language server.

The first thing you do in a JetBrains language is to write a lexer and parser for the target language. Your parser produces a syntax tree containing enough information to reconstruct the original document, and the IDE then operates on this semi-abstract syntax tree. When the IDE saves a file, it re-generates the contents from the semi-AST.

JetBrain's products are best understood as a refactoring engine (their original product) skinned with an editor.

  • Ive got a Core 6 of schema that can take my intermediate representations in S-Expression notations and pump those directly into four editors' highlighter/autocomplete/hint-hover.

    Also just polished the EBNF to S-expeession.

    So a common glue (via 6 schema) has been found for VCode, LSP, JetBrains and Vimscript.