forked from extern/nushell
Span ID Refactor - Step 1 (#12960)
# Description First part of SpanID refactoring series. This PR adds a `SpanId` type and a corresponding `span_id` field to `Expression`. Parser creating expressions will now add them to an array in `StateWorkingSet`, generates a corresponding ID and saves the ID to the Expression. The IDs are not used anywhere yet. For the rough overall plan, see https://github.com/nushell/nushell/issues/12963. # User-Facing Changes Hopefully none. This is only a refactor of Nushell's internals that shouldn't have visible side effects. # Tests + Formatting # After Submitting
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
use crate::{
|
||||
ast::{Argument, Block, Expr, ExternalArgument, ImportPattern, MatchPattern, RecordItem},
|
||||
engine::StateWorkingSet,
|
||||
BlockId, DeclId, Signature, Span, Type, VarId, IN_VARIABLE_ID,
|
||||
engine::{EngineState, StateWorkingSet},
|
||||
BlockId, DeclId, Signature, Span, SpanId, Type, VarId, IN_VARIABLE_ID,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::sync::Arc;
|
||||
@ -10,15 +10,18 @@ use std::sync::Arc;
|
||||
pub struct Expression {
|
||||
pub expr: Expr,
|
||||
pub span: Span,
|
||||
pub span_id: SpanId,
|
||||
pub ty: Type,
|
||||
pub custom_completion: Option<DeclId>,
|
||||
}
|
||||
|
||||
impl Expression {
|
||||
pub fn garbage(span: Span) -> Expression {
|
||||
pub fn garbage(working_set: &mut StateWorkingSet, span: Span) -> Expression {
|
||||
let span_id = working_set.add_span(span);
|
||||
Expression {
|
||||
expr: Expr::Garbage,
|
||||
span,
|
||||
span_id,
|
||||
ty: Type::Any,
|
||||
custom_completion: None,
|
||||
}
|
||||
@ -471,4 +474,49 @@ impl Expression {
|
||||
Expr::VarDecl(_) => {}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new(working_set: &mut StateWorkingSet, expr: Expr, span: Span, ty: Type) -> Expression {
|
||||
let span_id = working_set.add_span(span);
|
||||
Expression {
|
||||
expr,
|
||||
span,
|
||||
span_id,
|
||||
ty,
|
||||
custom_completion: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_existing(expr: Expr, span: Span, span_id: SpanId, ty: Type) -> Expression {
|
||||
Expression {
|
||||
expr,
|
||||
span,
|
||||
span_id,
|
||||
ty,
|
||||
custom_completion: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_unknown(expr: Expr, span: Span, ty: Type) -> Expression {
|
||||
Expression {
|
||||
expr,
|
||||
span,
|
||||
span_id: SpanId(0),
|
||||
ty,
|
||||
custom_completion: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn with_span_id(self, span_id: SpanId) -> Expression {
|
||||
Expression {
|
||||
expr: self.expr,
|
||||
span: self.span,
|
||||
span_id,
|
||||
ty: self.ty,
|
||||
custom_completion: self.custom_completion,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn span(&self, engine_state: &EngineState) -> Span {
|
||||
engine_state.get_span(self.span_id)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user