diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png index 8f2d5ce6a..2f01830a1 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png index 4b2e73e9e..7aab43f25 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png index 46d197e28..528af4463 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png index 3e85c12d6..005013867 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png differ diff --git a/packages/codemirror-lang-kcl/src/kcl.grammar b/packages/codemirror-lang-kcl/src/kcl.grammar index d8d9419b1..20400f5bb 100644 --- a/packages/codemirror-lang-kcl/src/kcl.grammar +++ b/packages/codemirror-lang-kcl/src/kcl.grammar @@ -59,7 +59,9 @@ UnaryOp { AddOp | BangOp } ObjectProperty { PropertyName (":" | Equals) expression } -ArgumentList { "(" commaSep ")" } +LabeledArgument { ArgumentLabel Equals expression } + +ArgumentList { "(" commaSep ")" } type[@isGroup=Type] { @specialize[@name=PrimitiveType]< @@ -74,6 +76,8 @@ VariableDefinition { identifier } VariableName { identifier } +ArgumentLabel { identifier } + @skip { whitespace | LineComment | BlockComment } kw { @specialize[@name={term}] } diff --git a/packages/codemirror-lang-kcl/test/call.txt b/packages/codemirror-lang-kcl/test/call.txt new file mode 100644 index 000000000..ef3beb4e6 --- /dev/null +++ b/packages/codemirror-lang-kcl/test/call.txt @@ -0,0 +1,85 @@ +# empty + +f() + +==> +Program(ExpressionStatement(CallExpression(VariableName, + ArgumentList))) + +# single anon arg + +f(1) + +==> +Program(ExpressionStatement(CallExpression(VariableName, + ArgumentList(Number)))) + +# deprecated multiple anon args + +f(1, 2) + +==> +Program(ExpressionStatement(CallExpression(VariableName, + ArgumentList(Number, + Number)))) + +# deprecated trailing % + +startSketchOn('XY') +|> line([thickness, 0], %) + +==> +Program(ExpressionStatement(PipeExpression(CallExpression(VariableName, + ArgumentList(String)), + PipeOperator, + CallExpression(VariableName, + ArgumentList(ArrayExpression(VariableName, + Number), + PipeSubstitution))))) + +# % and named arg + +startSketchOn('XY') +|> line(%, end = [thickness, 0]) + +==> +Program(ExpressionStatement(PipeExpression(CallExpression(VariableName, + ArgumentList(String)), + PipeOperator, + CallExpression(VariableName, + ArgumentList(PipeSubstitution, + LabeledArgument(ArgumentLabel, + Equals, + ArrayExpression(VariableName, + Number))))))) + +# implied % and named arg + +startSketchOn('XY') +|> line(end = [thickness, 0]) + +==> +Program(ExpressionStatement(PipeExpression(CallExpression(VariableName, + ArgumentList(String)), + PipeOperator, + CallExpression(VariableName, + ArgumentList(LabeledArgument(ArgumentLabel, + Equals, + ArrayExpression(VariableName, + Number))))))) + +# multiple named arg + +ngon(plane = "XY", numSides = 5, radius = pentR) + +==> +Program(ExpressionStatement(CallExpression(VariableName, + ArgumentList(LabeledArgument(ArgumentLabel, + Equals, + String), + LabeledArgument(ArgumentLabel, + Equals, + Number), + LabeledArgument(ArgumentLabel, + Equals, + VariableName)))))