Simplify creating string literal from ident
This commit is contained in:
parent
af6c171eb4
commit
d4797c5894
3 changed files with 17 additions and 24 deletions
|
|
@ -93,6 +93,15 @@ pub struct StringLit {
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl StringLit {
|
||||||
|
pub fn from_ident(ident: Ident) -> Self {
|
||||||
|
Self {
|
||||||
|
elems: vec![StringLitElem::Plain(ident.name)],
|
||||||
|
span: ident.span,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl HasSpan for StringLit {
|
impl HasSpan for StringLit {
|
||||||
fn span(&self) -> Span {
|
fn span(&self) -> Span {
|
||||||
self.span
|
self.span
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::ast::{
|
use crate::ast::{
|
||||||
BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, StringLitElem, TableConstr,
|
BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, TableConstr, TableConstrElem,
|
||||||
TableConstrElem, TableLitElem,
|
TableLitElem,
|
||||||
};
|
};
|
||||||
use crate::builtin::Builtin;
|
use crate::builtin::Builtin;
|
||||||
|
|
||||||
|
|
@ -94,15 +94,11 @@ impl Field {
|
||||||
} => {
|
} => {
|
||||||
// `expr s0 . s1 ident´
|
// `expr s0 . s1 ident´
|
||||||
// -> `expr s0 [ s1 ident_str ]`
|
// -> `expr s0 [ s1 ident_str ]`
|
||||||
let ident_str = Expr::Lit(Lit::String(StringLit {
|
|
||||||
elems: vec![StringLitElem::Plain(ident.name)],
|
|
||||||
span: ident.span,
|
|
||||||
}));
|
|
||||||
let new = Expr::Field(Self::Access {
|
let new = Expr::Field(Self::Access {
|
||||||
expr,
|
expr,
|
||||||
s0,
|
s0,
|
||||||
s1,
|
s1,
|
||||||
index: Box::new(ident_str),
|
index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(ident)))),
|
||||||
s2: Space::empty(span),
|
s2: Space::empty(span),
|
||||||
span,
|
span,
|
||||||
});
|
});
|
||||||
|
|
@ -121,15 +117,11 @@ impl Field {
|
||||||
} => {
|
} => {
|
||||||
// `expr s0 . s1 ident s2 = s3 value`
|
// `expr s0 . s1 ident s2 = s3 value`
|
||||||
// -> `expr s0 [ s1 ident_str ] s2 = s3 value`
|
// -> `expr s0 [ s1 ident_str ] s2 = s3 value`
|
||||||
let ident_str = Expr::Lit(Lit::String(StringLit {
|
|
||||||
elems: vec![StringLitElem::Plain(ident.name)],
|
|
||||||
span: ident.span,
|
|
||||||
}));
|
|
||||||
let new = Expr::Field(Self::Assign {
|
let new = Expr::Field(Self::Assign {
|
||||||
expr,
|
expr,
|
||||||
s0,
|
s0,
|
||||||
s1,
|
s1,
|
||||||
index: Box::new(ident_str),
|
index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(ident)))),
|
||||||
s2: Space::empty(span),
|
s2: Space::empty(span),
|
||||||
s3: s2,
|
s3: s2,
|
||||||
s4: s3,
|
s4: s3,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::ast::{
|
use crate::ast::{
|
||||||
BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, StringLitElem, TableConstr,
|
BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, TableConstr, TableConstrElem,
|
||||||
TableConstrElem, TableLitElem, Var,
|
TableLitElem, Var,
|
||||||
};
|
};
|
||||||
use crate::builtin::Builtin;
|
use crate::builtin::Builtin;
|
||||||
use crate::span::HasSpan;
|
use crate::span::HasSpan;
|
||||||
|
|
@ -117,13 +117,9 @@ impl Var {
|
||||||
// `name`
|
// `name`
|
||||||
// -> `[ name_str ]`
|
// -> `[ name_str ]`
|
||||||
let span = name.span();
|
let span = name.span();
|
||||||
let name_str = Expr::Lit(Lit::String(StringLit {
|
|
||||||
elems: vec![StringLitElem::Plain(name.name)],
|
|
||||||
span,
|
|
||||||
}));
|
|
||||||
let new = Expr::Var(Self::Access {
|
let new = Expr::Var(Self::Access {
|
||||||
s0: Space::empty(span),
|
s0: Space::empty(span),
|
||||||
index: Box::new(name_str),
|
index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(name)))),
|
||||||
s1: Space::empty(span),
|
s1: Space::empty(span),
|
||||||
span,
|
span,
|
||||||
});
|
});
|
||||||
|
|
@ -140,14 +136,10 @@ impl Var {
|
||||||
} => {
|
} => {
|
||||||
// `local name s0 = s1 value`
|
// `local name s0 = s1 value`
|
||||||
// -> `local [ name_str ] s0 = s1 value`
|
// -> `local [ name_str ] s0 = s1 value`
|
||||||
let name_str = Expr::Lit(Lit::String(StringLit {
|
|
||||||
elems: vec![StringLitElem::Plain(name.name)],
|
|
||||||
span: name.span,
|
|
||||||
}));
|
|
||||||
let new = Expr::Var(Self::Assign {
|
let new = Expr::Var(Self::Assign {
|
||||||
local,
|
local,
|
||||||
s0: Space::empty(span),
|
s0: Space::empty(span),
|
||||||
index: Box::new(name_str),
|
index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(name)))),
|
||||||
s1: Space::empty(span),
|
s1: Space::empty(span),
|
||||||
s2: s0,
|
s2: s0,
|
||||||
s3: s1,
|
s3: s1,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue