I’d like to implement autocompletion ( and possibly syntax highlighting; but autocompletion is my priority right now ) in CodeMirror using Lezer, where autocompletion is generated in accordance with my language grammar. Are there any example implementations of this, or particular parts of the Lezer API you can point me to as a starting point for implementing this ?
My simple example grammar so far looks roughly like this ( this is in the Python Lark EBNF format. This is incomplete; it’s just an example ) –
?start: function_call_retval_number | function_call_retval_string number_arg: function_call_retval_number | NUMBER number_args: number_arg ("," number_arg)+ two_number_args: number_arg "," number_arg ?function_call_retval_number: ADD number_args ")" | ADD2 two_number_args ")" | MULTIPLY number_args ")" ADD: /add(\s)*\(/ ADD2: /add2(\s)*\(/ MULTIPLY: /multiply(\s)*\(/
It’s seeming that I’d perhaps want to go in this direction –
Use lezer-generator to generate the parser from my grammar
?? Eg, if the input text is “add(1, add(”, I don’t see an API method or exception I can use to infer that what’s valid at that point is “NUMBER”, “add”, “add2”, or “multiply”, so that the CompletionSource can build an appropriate return value.
Any feedback, suggestions, and/or examples ?