mirror of
https://github.com/nushell/nushell
synced 2024-12-26 13:03:07 +00:00
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:
parent
f0ecaabd7d
commit
69fbfb939f
3 changed files with 8 additions and 1 deletions
|
@ -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()),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue