pest.vim icon indicating copy to clipboard operation
pest.vim copied to clipboard

Cannot detect declarations in other files

Open Elsie19 opened this issue 1 year ago • 4 comments

I have the following tree:

.
├── Cargo.lock
├── Cargo.toml
└── src
    ├── main.rs
    ├── parse
    │   ├── grammar.rs
    │   └── internals
    │       ├── base.pest
    │       ├── command_substitution.pest
    │       ├── strings.pest
    │       └── variables.pest
    └── parse.rs

In src/parse/grammar.rs I have the following code:

use pest_derive::Parser;

#[derive(Parser)]
#[grammar = "parse/internals/strings.pest"]
#[grammar = "parse/internals/variables.pest"]
#[grammar = "parse/internals/command_substitution.pest"]
#[grammar = "parse/internals/base.pest"]
pub struct ElviParser;

Notice the placement of strings.pest and variables.pest: how variables.pest is defined after strings.pest.

If I edit variables.pest, I get the following error:

// Main rules
normalVariable = @{ variableIdent ~ "=" ~ anyString }   ■ Rule anyString is undefined

variableIdent = { !ASCII_DIGIT ~ (ASCII_ALPHANUMERIC | "_")+ }

Where anyString is defined in strings.pest. It compiles correctly, it's just the LSP not understanding this.

Elsie19 avatar May 11 '24 22:05 Elsie19

I think this is due to https://github.com/pest-parser/pest-ide-tools/issues/24 ? @Jamalam360

tomtau avatar May 12 '24 13:05 tomtau

Yeah, the language server does not support split grammars. There is a comment on the issue that tomtau mentioned that explains why.

The solution for this would be for Pest files themselves to contain 'import' statements; something which I think is planned for Pest 3?

Jamalam360 avatar May 12 '24 13:05 Jamalam360

Would you be able to put together something where if I put:

// import: from/src/grammar.pest

it would import from there or is that out of scope?

Elsie19 avatar May 12 '24 14:05 Elsie19

It would need support on Pest's side - the LSP calls the Pest meta grammar and uses it's returned Pairs to get the location of symbols in the document.

It's doable on the LSP side with some refactoring, but the feature doesn't seem to be used all that often and if Pest 3 is around the corner it seems like a waste of time to be honest.

Jamalam360 avatar May 12 '24 14:05 Jamalam360