facebook / starlark-rust

A Rust implementation of the Starlark language
Apache License 2.0
699 stars 57 forks source link

lsp jump to def works poorly if file contains errors #89

Open cjhopman opened 1 year ago

cjhopman commented 1 year ago

For this code:

def bad():

def foo():
  some_ref()

You can't jump-to-def on some_ref(). We do have a red squiggle for the bad function, so that's good. Maybe we should jump to the error.

For this:

def foo():
  some_ref()

def bad() -> UndefinedType.type:
  pass

You can't jump-to-def on some_ref(). We also don't identify the error with a red squiggle.

MaartenStaa commented 1 year ago

Yeah, jump to definition (and most LSP things) don't work very well when there are parse errors. The LSP gets the new text of the source file, and tries to parse it. But as long as there are parse errors, it uses its last-known valid parse state, if any. Ideally the parser would handle such cases more gracefully.