tamer: nir::NirSymbolTy (Display): Add impl

Add initial descriptions and consolodate some of the types.  There'll be
more to come; this is just to get `Display` derives working for types
that'll be using it.  I'd like to see where this description manifests
itself before I decide how user-friendly I'd like it to be.

DEV-13156
main
Mike Gerwitz 2022-11-01 16:23:51 -04:00
parent 5e2d8f13a7
commit 9922910d09
2 changed files with 54 additions and 10 deletions

View File

@ -173,7 +173,6 @@ impl Display for SugaredNir {
pub enum NirSymbolTy { pub enum NirSymbolTy {
AnyIdent, AnyIdent,
BooleanLiteral, BooleanLiteral,
CalcIdent,
ClassIdent, ClassIdent,
ClassIdentList, ClassIdentList,
ConstIdent, ConstIdent,
@ -190,19 +189,64 @@ pub enum NirSymbolTy {
ParamName, ParamName,
ParamType, ParamType,
PkgPath, PkgPath,
PkgTitle,
ShortDimNumLiteral, ShortDimNumLiteral,
StringLiteral, StringLiteral,
SymbolTableKey, SymbolTableKey,
TexMathLiteral, TexMathLiteral,
Title, Title,
TplMetaIdent, TplMetaIdent,
TplName, TplIdent,
TplParamIdent, TplParamIdent,
TypeIdent, TypeIdent,
ValueIdent, ValueIdent,
} }
impl Display for NirSymbolTy {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
use NirSymbolTy::*;
match self {
AnyIdent => write!(f, "any identifier"),
BooleanLiteral => write!(
f,
"boolean literal {fmt_true} or {fmt_false}",
fmt_true = TtQuote::wrap("true"),
fmt_false = TtQuote::wrap("false"),
),
ClassIdent => write!(f, "classification identifier"),
ClassIdentList => {
write!(f, "space-delimited list of classification identifiers")
}
ConstIdent => write!(f, "constant identifier"),
DescLiteral => write!(f, "description literal"),
Dim => write!(f, "dimension declaration"),
DynNodeLiteral => write!(f, "dynamic node literal"),
FuncIdent => write!(f, "function identifier"),
IdentDtype => write!(f, "identifier primitive datatype"),
IdentType => write!(f, "identifier type"),
MapTransformLiteral => write!(f, "map transformation literal"),
NumLiteral => write!(f, "numeric literal"),
ParamDefault => write!(f, "param default"),
ParamIdent => write!(f, "param identifier"),
ParamName => write!(f, "param name"),
ParamType => write!(f, "param type"),
PkgPath => write!(f, "package path"),
ShortDimNumLiteral => {
write!(f, "short-hand dimensionalized numeric literal")
}
StringLiteral => write!(f, "string literal"),
SymbolTableKey => write!(f, "symbol table key name"),
TexMathLiteral => write!(f, "TeX math literal"),
Title => write!(f, "title"),
TplMetaIdent => write!(f, "template metadata identifier"),
TplIdent => write!(f, "template name"),
TplParamIdent => write!(f, "template param identifier"),
TypeIdent => write!(f, "type identifier"),
ValueIdent => write!(f, "value identifier"),
}
}
}
/// A ([`SymbolId`], [`Span`]) pair in an attribute value context that may /// A ([`SymbolId`], [`Span`]) pair in an attribute value context that may
/// require desugaring and interpretation within the context of a template /// require desugaring and interpretation within the context of a template
/// application. /// application.

View File

@ -230,7 +230,7 @@ ele_parse! {
_xmlns_lv: (QN_XMLNS_LV?) => Option<Literal<URI_LV_RATER>>, _xmlns_lv: (QN_XMLNS_LV?) => Option<Literal<URI_LV_RATER>>,
_id: (QN_ID?) => Option<N<{PkgPath}>>, _id: (QN_ID?) => Option<N<{PkgPath}>>,
_title: (QN_TITLE?) => Option<N<{PkgTitle}>>, _title: (QN_TITLE?) => Option<N<{Title}>>,
_desc: (QN_DESC?) => Option<N<{DescLiteral}>>, _desc: (QN_DESC?) => Option<N<{DescLiteral}>>,
// TODO: When can we get rid of this? // TODO: When can we get rid of this?
_core: (QN_CORE?) => Option<N<{BooleanLiteral}>>, _core: (QN_CORE?) => Option<N<{BooleanLiteral}>>,
@ -403,7 +403,7 @@ ele_parse! {
@ { @ {
_class: (QN_CLASS?) => Option<N<{ClassIdent}>>, _class: (QN_CLASS?) => Option<N<{ClassIdent}>>,
_no: (QN_NO?) => Option<N<{ClassIdentList}>>, _no: (QN_NO?) => Option<N<{ClassIdentList}>>,
_yields: (QN_YIELDS) => N<{CalcIdent}>, _yields: (QN_YIELDS) => N<{ValueIdent}>,
_desc: (QN_DESC?) => Option<N<{DescLiteral}>>, _desc: (QN_DESC?) => Option<N<{DescLiteral}>>,
_sym: (QN_SYM?) => Option<N<{TexMathLiteral}>>, _sym: (QN_SYM?) => Option<N<{TexMathLiteral}>>,
@ -656,8 +656,8 @@ ele_parse! {
SumExpr := QN_C_SUM { SumExpr := QN_C_SUM {
@ { @ {
_of: (QN_OF?) => Option<N<{ValueIdent}>>, _of: (QN_OF?) => Option<N<{ValueIdent}>>,
_generates: (QN_GENERATES?) => Option<N<{CalcIdent}>>, _generates: (QN_GENERATES?) => Option<N<{ValueIdent}>>,
_index: (QN_INDEX?) => Option<N<{CalcIdent}>>, _index: (QN_INDEX?) => Option<N<{ValueIdent}>>,
_desc: (QN_DESC?) => Option<N<{DescLiteral}>>, _desc: (QN_DESC?) => Option<N<{DescLiteral}>>,
_label: (QN_LABEL?) => Option<N<{DescLiteral}>>, _label: (QN_LABEL?) => Option<N<{DescLiteral}>>,
_sym: (QN_SYM?) => Option<N<{TexMathLiteral}>>, _sym: (QN_SYM?) => Option<N<{TexMathLiteral}>>,
@ -677,8 +677,8 @@ ele_parse! {
ProductExpr := QN_C_PRODUCT { ProductExpr := QN_C_PRODUCT {
@ { @ {
_of: (QN_OF?) => Option<N<{ValueIdent}>>, _of: (QN_OF?) => Option<N<{ValueIdent}>>,
_generates: (QN_GENERATES?) => Option<N<{CalcIdent}>>, _generates: (QN_GENERATES?) => Option<N<{ValueIdent}>>,
_index: (QN_INDEX?) => Option<N<{CalcIdent}>>, _index: (QN_INDEX?) => Option<N<{ValueIdent}>>,
_desc: (QN_DESC?) => Option<N<{DescLiteral}>>, _desc: (QN_DESC?) => Option<N<{DescLiteral}>>,
_label: (QN_LABEL?) => Option<N<{DescLiteral}>>, _label: (QN_LABEL?) => Option<N<{DescLiteral}>>,
_dot: (QN_DOT?) => Option<N<{BooleanLiteral}>>, _dot: (QN_DOT?) => Option<N<{BooleanLiteral}>>,
@ -1376,7 +1376,7 @@ ele_parse! {
/// Templates are applied using [`ApplyTemplate`] or [`TplApplyShort`]. /// Templates are applied using [`ApplyTemplate`] or [`TplApplyShort`].
TemplateStmt := QN_TEMPLATE { TemplateStmt := QN_TEMPLATE {
@ { @ {
_name: (QN_NAME) => N<{TplName}>, _name: (QN_NAME) => N<{TplIdent}>,
_desc: (QN_DESC) => N<{DescLiteral}>, _desc: (QN_DESC) => N<{DescLiteral}>,
} => SugaredNir::Todo, } => SugaredNir::Todo,