From 50f01351a4c07d2bc608e237fd685c9d8434904f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Standa=20Luke=C5=A1?= Date: Wed, 10 Mar 2021 15:54:34 +0000 Subject: [PATCH] Use var instead of val for variables in bindings --- .../Binding/BindingCompilationTests.cs | 12 ++++++------ .../Binding/JavascriptCompilationTests.cs | 8 ++++---- .../Binding/StaticCommandCompilationTests.cs | 4 ++-- .../Parser/Binding/BindingParserTests.cs | 14 +++++++------- .../Parser/Binding/Parser/BindingParser.cs | 14 +++++++------- .../Binding/Parser/BlockBindingParserNode.cs | 2 +- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/DotVVM.Framework.Tests.Common/Binding/BindingCompilationTests.cs b/src/DotVVM.Framework.Tests.Common/Binding/BindingCompilationTests.cs index d7f98ddeb6..95e5bbb46e 100755 --- a/src/DotVVM.Framework.Tests.Common/Binding/BindingCompilationTests.cs +++ b/src/DotVVM.Framework.Tests.Common/Binding/BindingCompilationTests.cs @@ -552,19 +552,19 @@ public void BindingCompiler_ComparisonOperators() [TestMethod] public void BindingCompiler_Variables() { - Assert.AreEqual(2, ExecuteBinding("val a = 1; a + 1")); - Assert.AreEqual(typeof(int), ExecuteBinding("val a = 1; a.GetType()")); + Assert.AreEqual(2, ExecuteBinding("var a = 1; a + 1")); + Assert.AreEqual(typeof(int), ExecuteBinding("var a = 1; a.GetType()")); - var result = ExecuteBinding("val a = 1; val b = a + LongProperty; val c = b + StringProp; c", new [] { new TestViewModel { LongProperty = 1, StringProp = "X" } }); + var result = ExecuteBinding("var a = 1; var b = a + LongProperty; var c = b + StringProp; c", new [] { new TestViewModel { LongProperty = 1, StringProp = "X" } }); Assert.AreEqual("2X", result); } [TestMethod] public void BindingCompiler_VariableShadowing() { - Assert.AreEqual(121L, ExecuteBinding("val LongProperty = LongProperty + 120; LongProperty", new TestViewModel { LongProperty = 1 })); - Assert.AreEqual(7, ExecuteBinding("val a = 1; val b = (val a = 5; a + 1); a + b")); - Assert.AreEqual(3, ExecuteBinding("val a = 1; val a = a + 1; val a = a + 1; a")); + Assert.AreEqual(121L, ExecuteBinding("var LongProperty = LongProperty + 120; LongProperty", new TestViewModel { LongProperty = 1 })); + Assert.AreEqual(7, ExecuteBinding("var a = 1; var b = (var a = 5; a + 1); a + b")); + Assert.AreEqual(3, ExecuteBinding("var a = 1; var a = a + 1; var a = a + 1; a")); } [TestMethod] diff --git a/src/DotVVM.Framework.Tests.Common/Binding/JavascriptCompilationTests.cs b/src/DotVVM.Framework.Tests.Common/Binding/JavascriptCompilationTests.cs index 4d2da37001..a722497db8 100644 --- a/src/DotVVM.Framework.Tests.Common/Binding/JavascriptCompilationTests.cs +++ b/src/DotVVM.Framework.Tests.Common/Binding/JavascriptCompilationTests.cs @@ -398,28 +398,28 @@ public void StaticCommandCompilation_IndexParameterInParent() [TestMethod] public void JavascriptCompilation_Variable() { - var result = CompileBinding("val a = 1; val b = 2; val c = 3; a + b + c", typeof(TestViewModel)); + var result = CompileBinding("var a = 1; var b = 2; var c = 3; a + b + c", typeof(TestViewModel)); Assert.AreEqual("function(a,b,c){a=1;b=2;c=3;return a+b+c;}()", result); } [TestMethod] public void JavascriptCompilation_Variable_Nested() { - var result = CompileBinding("val a = 1; val b = (val a = 5; a + 1); a + b", typeof(TestViewModel)); + var result = CompileBinding("var a = 1; var b = (var a = 5; a + 1); a + b", typeof(TestViewModel)); Assert.AreEqual("function(a0,b){a0=1;b=function(a){a=5;return a+1;}();return a0+b;}()", result); } [TestMethod] public void JavascriptCompilation_Variable_Property() { - var result = CompileBinding("val a = _this.StringProp; val b = _this.StringProp2; StringProp2 = a + b", typeof(TestViewModel)); + var result = CompileBinding("var a = _this.StringProp; var b = _this.StringProp2; StringProp2 = a + b", typeof(TestViewModel)); Assert.AreEqual("function(a,b){a=StringProp();b=StringProp2();return StringProp2(a+b);}()", result); } [TestMethod] public void JavascriptCompilation_Variable_VM() { - var result = CompileBinding("val a = _parent; val b = _this.StringProp2; StringProp2 = a + b", new [] { typeof(string), typeof(TestViewModel) }); + var result = CompileBinding("var a = _parent; var b = _this.StringProp2; StringProp2 = a + b", new [] { typeof(string), typeof(TestViewModel) }); Assert.AreEqual("function(a,b){a=$parent;b=StringProp2();return StringProp2(a+b);}()", result); } diff --git a/src/DotVVM.Framework.Tests.Common/Binding/StaticCommandCompilationTests.cs b/src/DotVVM.Framework.Tests.Common/Binding/StaticCommandCompilationTests.cs index 504179cc4f..ef0ad62136 100644 --- a/src/DotVVM.Framework.Tests.Common/Binding/StaticCommandCompilationTests.cs +++ b/src/DotVVM.Framework.Tests.Common/Binding/StaticCommandCompilationTests.cs @@ -85,8 +85,8 @@ public void StaticCommandCompilation_ChainedCommands() [TestMethod] public void StaticCommandCompilation_MultipleCommandsWithVariable() { - var result = CompileBinding("val lenVar = StaticCommands.GetLength(StringProp).ToString(); StringProp = StaticCommands.GetLength(lenVar).ToString();", typeof(TestViewModel)); - Assert.AreEqual("(function(a,b){return new Promise(function(resolve,reject){dotvvm.staticCommandPostback(a,\"WARNING/NOT/ENCRYPTED+++WyJEb3RWVk0uRnJhbWV3b3JrLlRlc3RzLkJpbmRpbmcuU3RhdGljQ29tbWFuZHMsIERvdFZWTS5GcmFtZXdvcmsuVGVzdHMuQ29tbW9uIiwiR2V0TGVuZ3RoIixbXSwiQUE9PSJd\",[b.$data.StringProp()]).then(function(r_0){dotvvm.staticCommandPostback(a,\"WARNING/NOT/ENCRYPTED+++WyJEb3RWVk0uRnJhbWV3b3JrLlRlc3RzLkJpbmRpbmcuU3RhdGljQ29tbWFuZHMsIERvdFZWTS5GcmFtZXdvcmsuVGVzdHMuQ29tbW9uIiwiR2V0TGVuZ3RoIixbXSwiQUE9PSJd\",[dotvvm.globalize.bindingNumberToString(r_0)()]).then(function(r_1){resolve(b.$data.StringProp(dotvvm.globalize.bindingNumberToString(r_1)()).StringProp());},reject);},reject);});}(this,ko.contextFor(this)))", result); + var result = CompileBinding("var lenVar = StaticCommands.GetLength(StringProp).ToString(); StringProp = StaticCommands.GetLength(lenVar).ToString();", typeof(TestViewModel)); + Assert.AreEqual("(function(a,d,b,c){return new Promise(function(resolve,reject){dotvvm.staticCommandPostback(a,\"WARNING/NOT/ENCRYPTED+++WyJEb3RWVk0uRnJhbWV3b3JrLlRlc3RzLkJpbmRpbmcuU3RhdGljQ29tbWFuZHMsIERvdFZWTS5GcmFtZXdvcmsuVGVzdHMuQ29tbW9uIiwiR2V0TGVuZ3RoIixbXSwiQUE9PSJd\",[d.$data.StringProp()]).then(function(r_0){(c=b=dotvvm.globalize.bindingNumberToString(r_0)(),dotvvm.staticCommandPostback(a,\"WARNING/NOT/ENCRYPTED+++WyJEb3RWVk0uRnJhbWV3b3JrLlRlc3RzLkJpbmRpbmcuU3RhdGljQ29tbWFuZHMsIERvdFZWTS5GcmFtZXdvcmsuVGVzdHMuQ29tbW9uIiwiR2V0TGVuZ3RoIixbXSwiQUE9PSJd\",[b]).then(function(r_1){resolve((c,d.$data.StringProp(dotvvm.globalize.bindingNumberToString(r_1)()).StringProp(),null));},reject));},reject);});}(this,ko.contextFor(this)))", result); } [TestMethod] diff --git a/src/DotVVM.Framework.Tests.Common/Parser/Binding/BindingParserTests.cs b/src/DotVVM.Framework.Tests.Common/Parser/Binding/BindingParserTests.cs index 55d7a98c32..3846cb754a 100644 --- a/src/DotVVM.Framework.Tests.Common/Parser/Binding/BindingParserTests.cs +++ b/src/DotVVM.Framework.Tests.Common/Parser/Binding/BindingParserTests.cs @@ -764,9 +764,9 @@ public void BindingParser_MultiblockExpression_SemicolonEnd_Invalid(string bindi } [DataTestMethod] - [DataRow("val x=A(); !x", "x", DisplayName = "Variable (val) expression")] - [DataRow("val val=A(); !val", "val", DisplayName = "Variable (val) expression, name=val")] - [DataRow("val x = A(); !x", "x", DisplayName = "Variable (val) expression with whitespaces")] + [DataRow("var x=A(); !x", "x", DisplayName = "Variable (val) expression")] + [DataRow("var var=A(); !var", "var", DisplayName = "Variable (val) expression, name=val")] + [DataRow("var x = A(); !x", "x", DisplayName = "Variable (val) expression with whitespaces")] public void BindingParser_VariableExpression_Simple(string bindingExpression, string variableName) { var parser = bindingParserNodeFactory.SetupParser(bindingExpression); @@ -792,7 +792,7 @@ public void BindingParser_VariableExpression_Simple(string bindingExpression, st [TestMethod] public void BindingParser_VariableExpression_3Vars() { - var parser = bindingParserNodeFactory.SetupParser("val a = 1; val b = 2; val c = 3; a+b+c"); + var parser = bindingParserNodeFactory.SetupParser("var a = 1; var b = 2; var c = 3; a+b+c"); var node1 = parser.ReadExpression().CastTo(); var node2 = node1.SecondExpression.CastTo(); var node3 = node2.SecondExpression.CastTo(); @@ -805,9 +805,9 @@ public void BindingParser_VariableExpression_3Vars() Assert.IsNotNull(node3.Variable); Assert.AreEqual("a", node1.Variable.Name); - Assert.AreEqual("val a = 1; val b = 2; val c = 3; a + b + c", node1.ToDisplayString()); - Assert.AreEqual("val b = 2; val c = 3; a + b + c", node2.ToDisplayString()); - Assert.AreEqual("val c = 3; a + b + c", node3.ToDisplayString()); + Assert.AreEqual("var a = 1; var b = 2; var c = 3; a + b + c", node1.ToDisplayString()); + Assert.AreEqual("var b = 2; var c = 3; a + b + c", node2.ToDisplayString()); + Assert.AreEqual("var c = 3; a + b + c", node3.ToDisplayString()); Assert.AreEqual("a + b + c", node3.SecondExpression.ToDisplayString()); } diff --git a/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BindingParser.cs b/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BindingParser.cs index f1e5af2764..634bd6297b 100644 --- a/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BindingParser.cs +++ b/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BindingParser.cs @@ -361,17 +361,17 @@ private BindingParserNode ReadIdentifierExpression(bool onlyTypeName) // we have `identifier identifier` - the first one must be a KEYWORD USAGE var keyword = keywordNameExpression.Name; - if (keyword == "val") + if (keyword == "var") { return ReadVariableExpression(startIndex); } - else if (keyword == "var" || keyword == "let") + else if (keyword == "val" || keyword == "let" || keyword == "const") { - expression = CreateNode(expression, startIndex, $"Variable declaration using {keyword} is not supported. Did you intend to use the val keyword?"); + expression = CreateNode(expression, startIndex, $"Variable declaration using {keyword} is not supported. Did you intend to use the var keyword?"); } else { - expression = CreateNode(expression, startIndex, $"Expression '{expression.ToDisplayString()}' can not be followed by an identifier. Did you intent to declare a variable using the val keyword?"); + expression = CreateNode(expression, startIndex, $"Expression '{expression.ToDisplayString()}' can not be followed by an identifier. Did you intent to declare a variable using the var keyword?"); } } else @@ -388,7 +388,7 @@ private BindingParserNode ReadVariableExpression(int startIndex) var variableName = ReadIdentifierNameExpression(); if (!(variableName is SimpleNameBindingParserNode)) { - variableName = CreateNode(variableName, variableName.StartPosition, $"Variable name can not be generic, please use the `val {variableName.Name} = X` syntax."); + variableName = CreateNode(variableName, variableName.StartPosition, $"Variable name can not be generic, please use the `var {variableName.Name} = X` syntax."); } var incorrectEquals = IsCurrentTokenIncorrect(BindingTokenType.AssignOperator); @@ -404,11 +404,11 @@ private BindingParserNode ReadVariableExpression(int startIndex) return CreateNode( new BlockBindingParserNode(resultBlock.FirstExpression, resultBlock.SecondExpression, variableName), startIndex, - !incorrectEquals ? null : $"Expected variable declaration `val {variableName.Name} = {resultBlock.FirstExpression}`"); + !incorrectEquals ? null : $"Expected variable declaration `var {variableName.Name} = {resultBlock.FirstExpression}`"); } else { - return CreateNode(value, startIndex, $"Variable declaration must be followed by a semicolon and another expression. Please add the return value after `val {variableName.Name} = {value}; ...` or remove the `val {variableName.Name} = ` in case you only want to invoke the expression."); + return CreateNode(value, startIndex, $"Variable declaration must be followed by a semicolon and another expression. Please add the return value after `var {variableName.Name} = {value}; ...` or remove the `var {variableName.Name} = ` in case you only want to invoke the expression."); } } diff --git a/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BlockBindingParserNode.cs b/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BlockBindingParserNode.cs index 684fba6970..df4e7d045a 100644 --- a/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BlockBindingParserNode.cs +++ b/src/DotVVM.Framework/Compilation/Parser/Binding/Parser/BlockBindingParserNode.cs @@ -25,6 +25,6 @@ public override IEnumerable EnumerateChildNodes() => new [] { FirstExpression, SecondExpression }; public override string ToDisplayString() - => (Variable is object ? $"val {Variable.Name} = " : "") + $"{FirstExpression.ToDisplayString()}; {SecondExpression.ToDisplayString()}"; + => (Variable is object ? $"var {Variable.Name} = " : "") + $"{FirstExpression.ToDisplayString()}; {SecondExpression.ToDisplayString()}"; } }