difftreelog
fix(rowan) unary plus
in: master
5 files changed
crates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth1// This file describes structure of jsonnet source code2// It is also used to generate files in src/generated34// Token names ending with `!` are considered meta, and handled specifically56SourceFile = Expr78SuffixIndex =9 '?'?10 '.'11 index:Name12SuffixIndexExpr =13 ('?' '.')?14 '['15 index:Expr16 ']'17SuffixSlice =18 SliceDesc19SuffixApply =20 ArgsDesc21 'tailstrict'?22Suffix =23 SuffixIndex24| SuffixIndexExpr25| SuffixSlice26| SuffixApply2728StmtLocal =29 'local'30 (Bind (',' Bind)* ','?)31 ';'32StmtAssert =33 Assertion34 ';'35Stmt =36 StmtLocal37| StmtAssert3839ExprBinary =40 lhs:Expr41 BinaryOperator42 rhs:Expr43ExprUnary =44 UnaryOperator45 rhs:Expr46ExprObjExtend =47 lhs:Expr48 rhs:Expr49ExprParened =50 '('51 Expr52 ')'5354ExprLiteral =55 Literal56ExprString =57 Text58ExprNumber =59 Number60ExprArray =61 '['62 (Expr (',' Expr)* ','?)?63 ']'64ExprObject =65 ObjBody66ExprArrayComp =67 '['68 Expr69 ','?70 CompSpec*71 ']'7273ExprImport =74 ImportKind Text7576ImportKind =77 'importstr'78| 'importbin'79| 'import'8081ExprVar =82 name:Name8384ExprIfThenElse =85 'if'86 cond:Expr87 'then'88 then:TrueExpr89 ('else' else_:FalseExpr)?9091ExprFunction =92 'function'93 '('94 ParamsDesc95 ')'96 Expr97ExprError =98 'error'99 Expr100101Expr =102 Stmt*103 ExprBase104 Suffix*105106ExprBase =107 ExprBinary108| ExprUnary109| ExprObjExtend110| ExprParened111| ExprString112| ExprNumber113| ExprLiteral114| ExprArray115| ExprObject116| ExprArrayComp117| ExprImport118| ExprVar119| ExprIfThenElse120| ExprFunction121| ExprError122123BinaryOperator =124 '||' | '??' | '&&'125| '|' | '^' | '&'126| '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in'127| '<<' | '>>'128| '+' | '-'129| '*' | '/' | '%'130| 'META_OBJECT_APPLY!'131| 'ERROR_NO_OPERATOR!'132133UnaryOperator =134 '-' | '!' | '~' | '+'135136SliceDescEnd=Expr137SliceDescStep=Expr138SliceDesc =139 '['140 from:Expr?141 ':'142 (143 end:SliceDescEnd?144 (145 ':'146 step:SliceDescStep?147 )?148 )?149 ']'150151Name =152 'LIT_IDENT!'153154ArgsDesc =155 '('156 (Arg (',' Arg)* ','?)?157 ')'158Arg =159 (name:Name '=')? Expr160161ObjBodyComp =162 '{'163 (MemberComp (',' MemberComp)* ','?)?164 CompSpec*165 '}'166ObjBodyMemberList =167 '{'168 (Member (',' Member)* ','?)?169 '}'170ObjBody =171 ObjBodyComp172| ObjBodyMemberList173174MemberBindStmt = ObjLocal175MemberAssertStmt = Assertion176MemberFieldNormal =177 FieldName178 '+'?179 Visibility180 Expr181MemberFieldMethod =182 FieldName183 ParamsDesc184 Visibility185 Expr186MemberComp =187 MemberBindStmt188| MemberFieldNormal189| MemberFieldMethod190Member =191 MemberBindStmt192| MemberAssertStmt193| MemberFieldNormal194| MemberFieldMethod195196ObjLocal =197 'local'198 Bind199200FieldNameFixed =201 id:Name202| Text203FieldNameDynamic =204 '['205 Expr206 ']'207FieldName =208 FieldNameFixed209| FieldNameDynamic210211Visibility =212 ':' ':'? ':'?213214Literal =215 'null'216| 'true'217| 'false'218| 'self'219| '$'220| 'super'221222Text =223 'LIT_STRING_DOUBLE!'224| 'ERROR_STRING_DOUBLE_UNTERMINATED!'225| 'LIT_STRING_SINGLE!'226| 'ERROR_STRING_SINGLE_UNTERMINATED!'227| 'LIT_STRING_DOUBLE_VERBATIM!'228| 'ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED!'229| 'LIT_STRING_SINGLE_VERBATIM!'230| 'ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED!'231| 'ERROR_STRING_VERBATIM_MISSING_QUOTES!'232| 'LIT_STRING_BLOCK!'233| 'ERROR_STRING_BLOCK_UNEXPECTED_END!'234| 'ERROR_STRING_BLOCK_MISSING_NEW_LINE!'235| 'ERROR_STRING_BLOCK_MISSING_TERMINATION!'236| 'ERROR_STRING_BLOCK_MISSING_INDENT!'237238Number =239 'LIT_FLOAT!'240| 'ERROR_FLOAT_JUNK_AFTER_POINT!'241| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT!'242| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN!'243244ForSpec =245 'for'246 bind:Destruct247 'in'248 Expr249ForObjSpec =250 'for'251 '['252 key:Name253 ']'254 Visibility255 value:Destruct256 'in'257 Expr258IfSpec =259 'if'260 Expr261CompSpec =262 ForSpec263| ForObjSpec264| IfSpec265266BindDestruct =267 into:Destruct268 '='269 value:Expr270BindFunction =271 name:Name272 params:ParamsDesc273 '='274 value:Expr275Bind =276 BindDestruct277| BindFunction278279ParamsDesc =280 '('281 (Param (',' Param)* ','?)?282 ')'283Param =284 Destruct285 (286 '='287 Expr288 )?289290Assertion =291 'assert'292 condition:Expr293 (294 ':'295 message:Expr296 )?297298DestructFull =299 Name300DestructSkip =301 '?'302DestructArray =303 '['304 (305 DestructArrayPart306 (',' DestructArrayPart)*307 ','?308 )?309 ']'310DestructObject =311 '{'312 (313 DestructObjectField314 (',' DestructObjectField)*315 ','?316 )?317 DestructRest?318 ','?319 '}'320Destruct =321 DestructFull322| DestructSkip323| DestructArray324| DestructObject325326DestructArrayElement =327 Destruct328DestructArrayPart =329 DestructArrayElement330| DestructRest331332DestructRest =333 '...'334 into:Name?335336DestructObjectField =337 field:Name338 (339 ':'340 Destruct341 )?342 (343 '='344 Expr345 )?346347// Aliases used to resolve node type conflicts348TrueExpr=Expr349FalseExpr=Expr350351// Trivia - tokens which will be implicitly skipped for parser352Trivia =353 'LIT_WHITESPACE!'354| 'LIT_MULTI_LINE_COMMENT!'355| 'ERROR_COMMENT_TOO_SHORT!'356| 'ERROR_COMMENT_UNTERMINATED!'357| 'LIT_SINGLE_LINE_HASH_COMMENT!'358| 'LIT_SINGLE_LINE_SLASH_COMMENT!'359360CustomError =361 'ERROR_MISSING_TOKEN!'362| 'ERROR_UNEXPECTED_TOKEN!'363| 'ERROR_CUSTOM!'crates/jrsonnet-rowan-parser/src/generated/nodes.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/generated/nodes.rs
+++ b/crates/jrsonnet-rowan-parser/src/generated/nodes.rs
@@ -977,6 +977,7 @@
Minus,
Not,
BitNot,
+ Plus,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -2494,7 +2495,7 @@
impl UnaryOperatorKind {
fn can_cast(kind: SyntaxKind) -> bool {
match kind {
- MINUS | NOT | BIT_NOT => true,
+ MINUS | NOT | BIT_NOT | PLUS => true,
_ => false,
}
}
@@ -2503,6 +2504,7 @@
MINUS => Self::Minus,
NOT => Self::Not,
BIT_NOT => Self::BitNot,
+ PLUS => Self::Plus,
_ => return None,
};
Some(res)
crates/jrsonnet-rowan-parser/src/precedence.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/precedence.rs
+++ b/crates/jrsonnet-rowan-parser/src/precedence.rs
@@ -22,7 +22,7 @@
impl UnaryOperatorKind {
pub fn binding_power(&self) -> ((), u8) {
match self {
- Self::Minus | Self::Not | Self::BitNot => ((), 20),
+ Self::Minus | Self::Not | Self::BitNot | Self::Plus => ((), 20),
}
}
}
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
@@ -1,12 +1,13 @@
---
source: crates/jrsonnet-rowan-parser/src/tests.rs
-expression: "+ 2\n"
+assertion_line: 60
+expression: "* 2\n"
---
SOURCE_FILE@0..4
EXPR@0..0
ERROR_MISSING_TOKEN@0..0
ERROR_CUSTOM@0..3
- PLUS@0..1 "+"
+ MUL@0..1 "*"
WHITESPACE@1..2 " "
FLOAT@2..3 "2"
WHITESPACE@3..4 "\n"
@@ -15,5 +16,5 @@
LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 0..3 }
===
· ╭── missing expression
-1 │ + 2
+1 │ * 2
· ╰───── unexpected tokens after end
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -85,7 +85,7 @@
a +
"#
no_lhs => r#"
- + 2
+ * 2
"#
no_operator => "
2 2