lsp and --ide-check fix for path self related diagnostics (#14538)

# Description

fixes
[this](https://github.com/nushell/nushell/pull/14303#issuecomment-2525100480)
where lsp and ide integration would produce the following error

---

```sh
nu --ide-check 100 "/path/to/env.nu"
```
with
```nu
const const_env = path self
```
would lead to
```
Error: nu:🐚:file_not_found

  × File not found
   ╭─[/path/to/env.nu:1:19]
 1 │ const const_env = path self
   ·                   ────┬────
   ·                       ╰── Couldn't find current file
   ╰────
```

# Tests + Formatting
- 🟢 `cargo fmt --all`
- 🟢 `cargo clippy --workspace`
This commit is contained in:
Bahex 2024-12-07 18:46:52 +03:00 committed by GitHub
parent f0ecaabd7d
commit 69fbfb939f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 8 additions and 1 deletions

View file

@ -7,7 +7,7 @@ use miette::{IntoDiagnostic, Result};
use nu_parser::parse; use nu_parser::parse;
use nu_protocol::{ use nu_protocol::{
engine::{EngineState, StateWorkingSet}, engine::{EngineState, StateWorkingSet},
Value, Span, Value,
}; };
impl LanguageServer { impl LanguageServer {
@ -28,6 +28,7 @@ impl LanguageServer {
let contents = rope_of_file.bytes().collect::<Vec<u8>>(); let contents = rope_of_file.bytes().collect::<Vec<u8>>();
let offset = working_set.next_span_start(); let offset = working_set.next_span_start();
working_set.files.push(file_path.into(), Span::unknown())?;
parse( parse(
&mut working_set, &mut working_set,
Some(&file_path.to_string_lossy()), Some(&file_path.to_string_lossy()),

View file

@ -274,6 +274,9 @@ impl LanguageServer {
// TODO: think about passing down the rope into the working_set // TODO: think about passing down the rope into the working_set
let contents = file.bytes().collect::<Vec<u8>>(); let contents = file.bytes().collect::<Vec<u8>>();
let _ = working_set
.files
.push(file_path.as_ref().into(), Span::unknown());
let block = parse(working_set, Some(&file_path), &contents, false); let block = parse(working_set, Some(&file_path), &contents, false);
let flattened = flatten_block(working_set, &block); let flattened = flatten_block(working_set, &block);

View file

@ -24,6 +24,7 @@ fn find_id(
) -> Option<(Id, usize, Span)> { ) -> Option<(Id, usize, Span)> {
let file_id = working_set.add_file(file_path.to_string(), file); let file_id = working_set.add_file(file_path.to_string(), file);
let offset = working_set.get_span_for_file(file_id).start; let offset = working_set.get_span_for_file(file_id).start;
let _ = working_set.files.push(file_path.into(), Span::unknown());
let block = parse(working_set, Some(file_path), file, false); let block = parse(working_set, Some(file_path), file, false);
let flattened = flatten_block(working_set, &block); let flattened = flatten_block(working_set, &block);
@ -88,6 +89,7 @@ pub fn check(engine_state: &mut EngineState, file_path: &str, max_errors: &Value
if let Ok(contents) = file { if let Ok(contents) = file {
let offset = working_set.next_span_start(); let offset = working_set.next_span_start();
let _ = working_set.files.push(file_path.into(), Span::unknown());
let block = parse(&mut working_set, Some(file_path), &contents, false); let block = parse(&mut working_set, Some(file_path), &contents, false);
for (idx, err) in working_set.parse_errors.iter().enumerate() { for (idx, err) in working_set.parse_errors.iter().enumerate() {
@ -631,6 +633,7 @@ pub fn ast(engine_state: &mut EngineState, file_path: &str) {
if let Ok(contents) = file { if let Ok(contents) = file {
let offset = working_set.next_span_start(); let offset = working_set.next_span_start();
let _ = working_set.files.push(file_path.into(), Span::unknown());
let parsed_block = parse(&mut working_set, Some(file_path), &contents, false); let parsed_block = parse(&mut working_set, Some(file_path), &contents, false);
let flat = flatten_block(&working_set, &parsed_block); let flat = flatten_block(&working_set, &parsed_block);