From 88c563237b1afc56e825e47ab4af69a391a0bdd0 Mon Sep 17 00:00:00 2001 From: Alexander Bondarev Date: Wed, 7 Jun 2023 13:00:48 +0300 Subject: [PATCH] Add parsing support for PackageRequirements ShaderLab command. --- .../ShaderLab/Psi/Parsing/ParserMessages.cs | 3 +- .../ShaderLab/Psi/Parsing/ShaderLab.lex | 1 + .../ShaderLab/Psi/Parsing/ShaderLab.psi | 53 +++++++- .../Parsing/ShaderLabTokenType.NodeSets.cs | 1 + .../Psi/Parsing/ShaderLabTokenType.Tokens.xml | 2 + .../TestSubShaderCommandContent01.shader.gold | 6 +- .../TestSubShaderCommandContent02.shader.gold | 6 +- ...estTexturePassCommandContent01.shader.gold | 6 +- .../Psi/Parsing/PackageRequirements01.shader | 26 ++++ .../Parsing/PackageRequirements01.shader.gold | 113 ++++++++++++++++++ .../Psi/Parsing/PackageRequirements02.shader | 17 +++ .../Parsing/PackageRequirements02.shader.gold | 68 +++++++++++ .../ShaderLab/Psi/Parsing/ParserTests.cs | 3 + 13 files changed, 295 insertions(+), 10 deletions(-) create mode 100644 resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader create mode 100644 resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader.gold create mode 100644 resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader create mode 100644 resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader.gold diff --git a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ParserMessages.cs b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ParserMessages.cs index 2508dc6b4b..adff9c2ae9 100644 --- a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ParserMessages.cs +++ b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ParserMessages.cs @@ -43,6 +43,7 @@ public static class ParserMessages public const string IDS_SHADER_BLOCK = "shader block"; public const string IDS_SHADER_LAB_IDENTIFIER = "identifier"; public const string IDS_SIMPLE_PROPERTY_TYPE = "property type"; + public const string IDS_STATE_COMMAND_OR_PACKAGE_REQUIREMENTS = "state command or package requirements"; public const string IDS_STATE_COMMAND = "state command"; public const string IDS_STENCIL_CONTENTS = "Stencil command"; public const string IDS_STENCIL_OPERATION = "stencil operation"; @@ -55,7 +56,7 @@ public static class ParserMessages public const string IDS_VALUE = "value"; public const string IDS_ZTEST_VALUE = "ZTest value"; public const string IDS_FALLBACK_VALUE = "Fallback value"; - public const string IDS_SHADER_LAB_COMMAND = "ShaderLab command"; + public const string IDS_SHADER_LAB_COMMAND = "ShaderLab command"; public static string GetString(string id) => id; diff --git a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.lex b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.lex index 408992bd8d..48bd04c521 100644 --- a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.lex +++ b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.lex @@ -103,6 +103,7 @@ PP_DIGITS={DECIMAL_DIGIT}(({WHITESPACE})*{DECIMAL_DIGIT})* "*" { return ShaderLabTokenType.MULTIPLY; } "{" { return ShaderLabTokenType.LBRACE; } "}" { return ShaderLabTokenType.RBRACE; } + ":" { return ShaderLabTokenType.COLON; } "(" { return ShaderLabTokenType.LPAREN; } ")" { return ShaderLabTokenType.RPAREN; } diff --git a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.psi b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.psi index 1cb64c7958..278424df9d 100644 --- a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.psi +++ b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLab.psi @@ -260,6 +260,7 @@ options { | FALLBACK_KEYWORD | CUSTOM_EDITOR_KEYWORD | DEPENDENCY_KEYWORD + | PACKAGE_REQUIREMENTS_KEYWORD | COLOR_KEYWORD | FLOAT_KEYWORD @@ -472,6 +473,7 @@ options { | FALLBACK_KEYWORD | CUSTOM_EDITOR_KEYWORD | DEPENDENCY_KEYWORD + | PACKAGE_REQUIREMENTS_KEYWORD | COLOR_KEYWORD | FLOAT_KEYWORD @@ -680,6 +682,7 @@ options { | FALLBACK_KEYWORD | CUSTOM_EDITOR_KEYWORD | DEPENDENCY_KEYWORD + | PACKAGE_REQUIREMENTS_KEYWORD | COLOR_KEYWORD | FLOAT_KEYWORD @@ -1089,6 +1092,7 @@ interface blockCommand | bindChannelsCommand | grabPassDef | texturePassDef + | packageRequirementsCommand ; interface blockValue @@ -1106,6 +1110,7 @@ interface blockValue | bindChannelsValue | grabPassValue | texturePassValue + | packageRequirementsValue ; @@ -1482,7 +1487,13 @@ subShaderValue private errorhandling subShaderValueBody options { preCheckExpected; } : - pass* + packageRequirementsForSubShaderValueBody? + pass* +; + +private errorhandling packageRequirementsForSubShaderValueBody +: + packageRequirementsCommand ; pass @@ -1506,8 +1517,6 @@ interface stateCommand | legacyRenderStateCommand ; - - // ************************************************************************** // // Tags @@ -2678,10 +2687,16 @@ texturePassValue private errorhandling texturePassContents options { preCheckExpected; } : + packageRequirementsForTexturePassContents? stateCommandForTexturePass* setTextureCommand* ; +private errorhandling packageRequirementsForTexturePassContents +: + packageRequirementsCommand +; + private errorhandling stateCommandForTexturePass : stateCommand @@ -2758,3 +2773,35 @@ dependencyValue EQUALS STRING_LITERAL ; + +// ************************************************************************** +// +// PackageRequirements +// +// ************************************************************************** +// https://docs.unity3d.com/2021.2/Documentation/Manual/SL-PackageRequirements.html +packageRequirementsCommand +options { stubBase="ShaderLabBlockCommandBase"; } +: + PACKAGE_REQUIREMENTS_KEYWORD + packageRequirementsValue +; + +packageRequirementsValue +: + LBRACE + packageRequirementsValueBody + RBRACE +; + +private errorhandling packageRequirementsValueBody +options { preCheckExpected; } +: + packageRequirementEntry* +; + +errorhandling packageRequirementEntry +: + STRING_LITERAL + (COLON STRING_LITERAL)? +; \ No newline at end of file diff --git a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.NodeSets.cs b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.NodeSets.cs index 5b41395981..c50c8c694c 100644 --- a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.NodeSets.cs +++ b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.NodeSets.cs @@ -16,6 +16,7 @@ static ShaderLabTokenType() FALLBACK_KEYWORD, CUSTOM_EDITOR_KEYWORD, DEPENDENCY_KEYWORD, + PACKAGE_REQUIREMENTS_KEYWORD, COLOR_KEYWORD, FLOAT_KEYWORD, diff --git a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.Tokens.xml b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.Tokens.xml index 8e19455d48..34261eb6b2 100644 --- a/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.Tokens.xml +++ b/resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Parsing/ShaderLabTokenType.Tokens.xml @@ -54,6 +54,7 @@ + @@ -103,6 +104,7 @@ + diff --git a/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent01.shader.gold b/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent01.shader.gold index a6f03c7528..bb94427599 100644 --- a/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent01.shader.gold +++ b/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent01.shader.gold @@ -1,4 +1,4 @@ -# 25 ITEMS # +# 26 ITEMS # + AlphaTest AlphaToMask @@ -17,6 +17,7 @@ Lighting Material Name Offset +PackageRequirements Pass SeparateSpecular Stencil @@ -26,7 +27,7 @@ ZClip ZTest ZWrite # AUTOMATIC # -# 25 ITEMS # +# 26 ITEMS # + AlphaTest AlphaToMask @@ -45,6 +46,7 @@ Lighting Material Name Offset +PackageRequirements Pass SeparateSpecular Stencil diff --git a/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent02.shader.gold b/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent02.shader.gold index a6f03c7528..bb94427599 100644 --- a/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent02.shader.gold +++ b/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestSubShaderCommandContent02.shader.gold @@ -1,4 +1,4 @@ -# 25 ITEMS # +# 26 ITEMS # + AlphaTest AlphaToMask @@ -17,6 +17,7 @@ Lighting Material Name Offset +PackageRequirements Pass SeparateSpecular Stencil @@ -26,7 +27,7 @@ ZClip ZTest ZWrite # AUTOMATIC # -# 25 ITEMS # +# 26 ITEMS # + AlphaTest AlphaToMask @@ -45,6 +46,7 @@ Lighting Material Name Offset +PackageRequirements Pass SeparateSpecular Stencil diff --git a/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestTexturePassCommandContent01.shader.gold b/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestTexturePassCommandContent01.shader.gold index acf91b5902..e09fe5456a 100644 --- a/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestTexturePassCommandContent01.shader.gold +++ b/resharper/resharper-unity/test/data/Unity/ShaderLab/CodeCompletion/Keywords/List/TestTexturePassCommandContent01.shader.gold @@ -1,4 +1,4 @@ -# 23 ITEMS # +# 24 ITEMS # + AlphaTest AlphaToMask @@ -16,6 +16,7 @@ Lighting Material Name Offset +PackageRequirements SeparateSpecular SetTexture Stencil @@ -24,7 +25,7 @@ ZClip ZTest ZWrite # AUTOMATIC # -# 23 ITEMS # +# 24 ITEMS # + AlphaTest AlphaToMask @@ -42,6 +43,7 @@ Lighting Material Name Offset +PackageRequirements SeparateSpecular SetTexture Stencil diff --git a/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader new file mode 100644 index 0000000000..f5d779bd92 --- /dev/null +++ b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader @@ -0,0 +1,26 @@ +{caret}Shader "Examples/ExampleShader" +{ + SubShader + { + PackageRequirements + { + "com.my.package": "2.2" + "com.package.without.version" + } + Pass + { + PackageRequirements + { + "com.unity.render-pipelines.universal": "[10.2.1,11.0]" + "com.unity.textmeshpro": "3.2" + } + } + Pass + { + PackageRequirements + { + "com.unity.render-pipelines.high-definition": "[8.0,8.5]" + } + } + } +} \ No newline at end of file diff --git a/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader.gold b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader.gold new file mode 100644 index 0000000000..3a58db7177 --- /dev/null +++ b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements01.shader.gold @@ -0,0 +1,113 @@ +Language: PsiLanguageType:SHADERLAB +IShaderLabFile + IShaderCommand + ShaderLabTokenType+KeywordTokenElement(type:SHADER_KEYWORD, text:Shader) + Whitespace(type:WHITESPACE, text: ) spaces: " " + IShaderValue + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"Examples/ExampleShader") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IShaderBlock + ISubShaderCommand + ShaderLabTokenType+KeywordTokenElement(type:SUB_SHADER_KEYWORD, text:SubShader) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ISubShaderValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsCommand + ShaderLabTokenType+KeywordTokenElement(type:PACKAGE_REQUIREMENTS_KEYWORD, text:PackageRequirements) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementEntry + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"com.my.package") + ShaderLabTokenType+FixedTokenElement(type:COLON, text::) + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"2.2") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementEntry + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"com.package.without.version") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPass + ITexturePassDef + ShaderLabTokenType+KeywordTokenElement(type:PASS_KEYWORD, text:Pass) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ITexturePassValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsCommand + ShaderLabTokenType+KeywordTokenElement(type:PACKAGE_REQUIREMENTS_KEYWORD, text:PackageRequirements) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementEntry + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"com.unity.render-pipelines.universal") + ShaderLabTokenType+FixedTokenElement(type:COLON, text::) + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"[10.2.1,11.0]") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementEntry + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"com.unity.textmeshpro") + ShaderLabTokenType+FixedTokenElement(type:COLON, text::) + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"3.2") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPass + ITexturePassDef + ShaderLabTokenType+KeywordTokenElement(type:PASS_KEYWORD, text:Pass) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ITexturePassValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsCommand + ShaderLabTokenType+KeywordTokenElement(type:PACKAGE_REQUIREMENTS_KEYWORD, text:PackageRequirements) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementEntry + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"com.unity.render-pipelines.high-definition") + ShaderLabTokenType+FixedTokenElement(type:COLON, text::) + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"[8.0,8.5]") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + diff --git a/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader new file mode 100644 index 0000000000..e5e957d640 --- /dev/null +++ b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader @@ -0,0 +1,17 @@ +{caret}Shader "Examples/ExampleShader" +{ + SubShader + { + PackageRequirements + { + "com.my.package": +} + Pass + { + PackageRequirements + { + : "[10.2.1,11.0]" +} + } +} +} \ No newline at end of file diff --git a/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader.gold b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader.gold new file mode 100644 index 0000000000..e9a62cf347 --- /dev/null +++ b/resharper/resharper-unity/test/data/Unity/ShaderLab/Psi/Parsing/PackageRequirements02.shader.gold @@ -0,0 +1,68 @@ +Language: PsiLanguageType:SHADERLAB +IShaderLabFile + IShaderCommand + ShaderLabTokenType+KeywordTokenElement(type:SHADER_KEYWORD, text:Shader) + Whitespace(type:WHITESPACE, text: ) spaces: " " + IShaderValue + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"Examples/ExampleShader") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IShaderBlock + ISubShaderCommand + ShaderLabTokenType+KeywordTokenElement(type:SUB_SHADER_KEYWORD, text:SubShader) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ISubShaderValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsCommand + ShaderLabTokenType+KeywordTokenElement(type:PACKAGE_REQUIREMENTS_KEYWORD, text:PackageRequirements) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementEntry + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"com.my.package") + ShaderLabTokenType+FixedTokenElement(type:COLON, text::) + ErrorElement:"XXX" expected + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPass + ITexturePassDef + ShaderLabTokenType+KeywordTokenElement(type:PASS_KEYWORD, text:Pass) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ITexturePassValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsCommand + ShaderLabTokenType+KeywordTokenElement(type:PACKAGE_REQUIREMENTS_KEYWORD, text:PackageRequirements) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementsValue + ShaderLabTokenType+FixedTokenElement(type:LBRACE, text:{) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ErrorElement:'}' or '"XXX"' expected + ShaderLabTokenType+FixedTokenElement(type:COLON, text::) + Whitespace(type:WHITESPACE, text: ) spaces: " " + IPackageRequirementEntry + ShaderLabTokenType+GenericTokenElement(type:STRING_LITERAL, text:"[10.2.1,11.0]") + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + Whitespace(type:WHITESPACE, text: ) spaces: " " + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + NewLine(type:NEW_LINE, text:\n) spaces: "\n" + ShaderLabTokenType+FixedTokenElement(type:RBRACE, text:}) + diff --git a/resharper/resharper-unity/test/src/Unity.Tests/Unity/ShaderLab/Psi/Parsing/ParserTests.cs b/resharper/resharper-unity/test/src/Unity.Tests/Unity/ShaderLab/Psi/Parsing/ParserTests.cs index a8f5ff0fdd..4d6258bbab 100644 --- a/resharper/resharper-unity/test/src/Unity.Tests/Unity/ShaderLab/Psi/Parsing/ParserTests.cs +++ b/resharper/resharper-unity/test/src/Unity.Tests/Unity/ShaderLab/Psi/Parsing/ParserTests.cs @@ -18,6 +18,9 @@ public class ParserTests : ParserTestBase [TestCase("ShaderWithErrors02")] [TestCase("ShaderWithErrors03")] [TestCase("ShaderWithErrors04")] + + [TestCase("PackageRequirements01")] + [TestCase("PackageRequirements02")] [TestCase("PropertiesEmpty")] [TestCase("Properties")]