From 89171506880ad26d82390b7dbbcbc422502f07da Mon Sep 17 00:00:00 2001 From: aag031 Date: Sat, 21 Nov 2020 16:26:34 +0300 Subject: [PATCH 1/8] Add comments token --- .../java/amailp/intellij/robot/elements/RobotTokenTypes.java | 1 + src/main/resources/amailp/intellij/robot/lexer/Robot.flex | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java b/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java index f66778e..8540516 100644 --- a/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java +++ b/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java @@ -17,6 +17,7 @@ public interface RobotTokenTypes { final IElementType KeywordsHeader = new RobotIElementType("KeywordsHeader"); final IElementType VariablesHeader = new RobotIElementType("VariablesHeader"); final IElementType TasksHeader = new RobotIElementType("TasksHeader"); + final IElementType CommentsHeader = new RobotIElementType("CommentsHeader"); final IElementType Ellipsis = new RobotIElementType("Ellipsis"); final IElementType ScalarVariable = new RobotIElementType("ScalarVariable"); diff --git a/src/main/resources/amailp/intellij/robot/lexer/Robot.flex b/src/main/resources/amailp/intellij/robot/lexer/Robot.flex index 5f876f3..c1fa748 100644 --- a/src/main/resources/amailp/intellij/robot/lexer/Robot.flex +++ b/src/main/resources/amailp/intellij/robot/lexer/Robot.flex @@ -29,6 +29,7 @@ TestCasesHeader = "*** Test Cases ***" | "*** Test Case ***" KeywordsHeader = "*** Keywords ***" | "*** Keyword ***" VariablesHeader = "*** Variables ***" | "*** Variable ***" TasksHeader = "*** Tasks ***" | "*** Task ***" +CommentsHeader = "*** Comments ***" WordChar = [^$@&%\ \t\f\r\n] @@ -68,6 +69,7 @@ EnvironmentVariable = "%{" ~"}" {KeywordsHeader} { yybegin(LINE); return RobotTokenTypes.KeywordsHeader; } {VariablesHeader} { yybegin(LINE); return RobotTokenTypes.VariablesHeader; } {TasksHeader} { yybegin(LINE); return RobotTokenTypes.TasksHeader; } + {CommentsHeader} { yybegin(LINE); return RobotTokenTypes.CommentsHeader;} {Ellipsis} { yybegin(LINE); return RobotTokenTypes.Ellipsis; } {ScalarVariable} { yybegin(LINE); return RobotTokenTypes.ScalarVariable; } From 2ebc3ae1a38f469ad3f89a0bb99e6861472f3d57 Mon Sep 17 00:00:00 2001 From: aag031 Date: Sat, 21 Nov 2020 17:47:24 +0300 Subject: [PATCH 2/8] Add parsing comments table header --- .../java/amailp/intellij/robot/elements/RobotTokenTypes.java | 2 +- src/main/scala/amailp/intellij/robot/ast/package.scala | 1 + src/main/scala/amailp/intellij/robot/parser/RobotParser.scala | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java b/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java index 8540516..ee7f547 100644 --- a/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java +++ b/src/main/java/amailp/intellij/robot/elements/RobotTokenTypes.java @@ -36,5 +36,5 @@ public interface RobotTokenTypes { final TokenSet WhitespacesTokens = TokenSet.create(IrrelevantSpaces, BlankLine); final TokenSet CommentsTokens = TokenSet.create(Comment); final TokenSet StringLiteralElements = TokenSet.EMPTY; - final TokenSet HeaderTokens = TokenSet.create(SettingsHeader, TestCasesHeader, KeywordsHeader, VariablesHeader, TasksHeader); + final TokenSet HeaderTokens = TokenSet.create(SettingsHeader, TestCasesHeader, KeywordsHeader, VariablesHeader, TasksHeader, CommentsHeader); } \ No newline at end of file diff --git a/src/main/scala/amailp/intellij/robot/ast/package.scala b/src/main/scala/amailp/intellij/robot/ast/package.scala index 0ca4846..3827640 100644 --- a/src/main/scala/amailp/intellij/robot/ast/package.scala +++ b/src/main/scala/amailp/intellij/robot/ast/package.scala @@ -6,6 +6,7 @@ import com.intellij.psi.tree.TokenSet package object ast { object Tables extends RobotIElementType("Tables") + object CommentsTable extends RobotIElementType("CommentsTable") object SettingsTable extends RobotIElementType("SettingsTable") object Setting extends RobotIElementType("Setting") object SettingName extends RobotIElementType("SettingName") diff --git a/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala b/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala index 497098a..87dfddf 100644 --- a/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala +++ b/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala @@ -17,6 +17,7 @@ object RobotParser extends PsiParser { case TestCasesHeader | TasksHeader => parseTableItemsWith(parseTestCaseDefinition); Some(ast.TestCasesTable) case KeywordsHeader => parseTableItemsWith(parseKeywordDefinition); Some(ast.KeywordsTable) case VariablesHeader => parseTableItemsWith(parseVariableDefinition); Some(ast.VariablesTable) + case CommentsHeader => parseTableItemsWith(parseHeaderRow); Some(ast.CommentsTable) case _ => None } tableType match { @@ -25,6 +26,7 @@ object RobotParser extends PsiParser { } } + def parseHeaderRow(): IElementType = { val headerMark = mark val headerType = currentType From c45264b9c5097451595467a3163e2baf7ffc61c3 Mon Sep 17 00:00:00 2001 From: aag031 Date: Sat, 21 Nov 2020 18:52:09 +0300 Subject: [PATCH 3/8] Add comments table empty parser --- .../amailp/intellij/robot/parser/CommentsTableParser.scala | 7 +++++++ src/main/scala/amailp/intellij/robot/parser/package.scala | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala diff --git a/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala b/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala new file mode 100644 index 0000000..359f887 --- /dev/null +++ b/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala @@ -0,0 +1,7 @@ +package amailp.intellij.robot.parser + +class CommentsTableParser extends SubParser { + override def parse(builder: RobotPsiBuilder): Unit = { + builder.parserCommentLine() + } +} diff --git a/src/main/scala/amailp/intellij/robot/parser/package.scala b/src/main/scala/amailp/intellij/robot/parser/package.scala index 2ba7331..0932913 100644 --- a/src/main/scala/amailp/intellij/robot/parser/package.scala +++ b/src/main/scala/amailp/intellij/robot/parser/package.scala @@ -18,6 +18,10 @@ package object parser { def currentType = getTokenType def currentText = getTokenText + def parserCommentLine(includingTerminator: Boolean = true): Unit = { + + } + def parseRowContent(includingTerminator: Boolean = true) { if (!currentIsSeparator) parseCellOfType(ast.NonEmptyCell) parseRemainingCells() From 699b8e8c12bc7c6f774f255858288fdc8a6a7e95 Mon Sep 17 00:00:00 2001 From: aag031 Date: Sun, 22 Nov 2020 20:05:27 +0300 Subject: [PATCH 4/8] drat version of comments --- .../amailp/intellij/robot/parser/CommentsTableParser.scala | 2 +- src/main/scala/amailp/intellij/robot/parser/RobotParser.scala | 3 ++- src/main/scala/amailp/intellij/robot/parser/package.scala | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala b/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala index 359f887..fdf08f8 100644 --- a/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala +++ b/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala @@ -1,6 +1,6 @@ package amailp.intellij.robot.parser -class CommentsTableParser extends SubParser { +object CommentsTableParser extends SubParser { override def parse(builder: RobotPsiBuilder): Unit = { builder.parserCommentLine() } diff --git a/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala b/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala index 87dfddf..aa18443 100644 --- a/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala +++ b/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala @@ -5,6 +5,7 @@ import com.intellij.psi.tree.IElementType import amailp.intellij.robot.elements.RobotTokenTypes._ import amailp.intellij.robot.ast + object RobotParser extends PsiParser { def parse(root: IElementType, builder: PsiBuilder): ASTNode = { val robotBuilder = new RobotPsiBuilder(builder) @@ -17,7 +18,7 @@ object RobotParser extends PsiParser { case TestCasesHeader | TasksHeader => parseTableItemsWith(parseTestCaseDefinition); Some(ast.TestCasesTable) case KeywordsHeader => parseTableItemsWith(parseKeywordDefinition); Some(ast.KeywordsTable) case VariablesHeader => parseTableItemsWith(parseVariableDefinition); Some(ast.VariablesTable) - case CommentsHeader => parseTableItemsWith(parseHeaderRow); Some(ast.CommentsTable) + case CommentsHeader => parseTableItemsWithSubParser(CommentsTableParser); Some(ast.CommentsTable) case _ => None } tableType match { diff --git a/src/main/scala/amailp/intellij/robot/parser/package.scala b/src/main/scala/amailp/intellij/robot/parser/package.scala index 0932913..b581cd9 100644 --- a/src/main/scala/amailp/intellij/robot/parser/package.scala +++ b/src/main/scala/amailp/intellij/robot/parser/package.scala @@ -19,7 +19,9 @@ package object parser { def currentText = getTokenText def parserCommentLine(includingTerminator: Boolean = true): Unit = { - + while (currentType != SettingsHeader) { + parseRowContent() + } } def parseRowContent(includingTerminator: Boolean = true) { From 43b19c76c2e21276aec4cd37d0846b7626e97ce4 Mon Sep 17 00:00:00 2001 From: aag031 Date: Tue, 24 Nov 2020 18:46:42 +0300 Subject: [PATCH 5/8] improve formatting --- src/main/scala/amailp/intellij/robot/ast/package.scala | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/scala/amailp/intellij/robot/ast/package.scala b/src/main/scala/amailp/intellij/robot/ast/package.scala index 3827640..974ce98 100644 --- a/src/main/scala/amailp/intellij/robot/ast/package.scala +++ b/src/main/scala/amailp/intellij/robot/ast/package.scala @@ -32,6 +32,5 @@ package object ast { object TableRow extends RobotIElementType("TableRow") object NonEmptyCell extends RobotIElementType("NonEmptyCell") - val tableElementTypes = TokenSet.create(SettingsTable, TestCasesTable, KeywordsTable, VariablesTable) - + val tableElementTypes = TokenSet.create(SettingsTable, TestCasesTable, KeywordsTable, VariablesTable, CommentsTable) } From df05ad2ced6acc7cd8507062370b85f56fc8cdd1 Mon Sep 17 00:00:00 2001 From: aag031 Date: Tue, 1 Dec 2020 19:37:50 +0300 Subject: [PATCH 6/8] simplify comments table parsing --- .../robot/parser/CommentsTableParser.scala | 7 ----- .../intellij/robot/parser/RobotParser.scala | 8 ++++- .../CommentsTableKeywords.robot | 3 ++ .../CommentsTableSettings.robot | 3 ++ .../CommentsTableTasks.robot | 3 ++ .../CommentsTableTestCases.robot | 3 ++ .../CommentsTableVariables.robot | 3 ++ .../psi/tables/RobotCommentsTableTest.scala | 29 +++++++++++++++++++ .../RobotCodeInsightFixtureTestCase.scala | 5 +--- 9 files changed, 52 insertions(+), 12 deletions(-) delete mode 100644 src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala create mode 100644 src/test/resources/CommentsTableTest/CommentsTableKeywords.robot create mode 100644 src/test/resources/CommentsTableTest/CommentsTableSettings.robot create mode 100644 src/test/resources/CommentsTableTest/CommentsTableTasks.robot create mode 100644 src/test/resources/CommentsTableTest/CommentsTableTestCases.robot create mode 100644 src/test/resources/CommentsTableTest/CommentsTableVariables.robot create mode 100644 src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala diff --git a/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala b/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala deleted file mode 100644 index fdf08f8..0000000 --- a/src/main/scala/amailp/intellij/robot/parser/CommentsTableParser.scala +++ /dev/null @@ -1,7 +0,0 @@ -package amailp.intellij.robot.parser - -object CommentsTableParser extends SubParser { - override def parse(builder: RobotPsiBuilder): Unit = { - builder.parserCommentLine() - } -} diff --git a/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala b/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala index aa18443..4bcbedd 100644 --- a/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala +++ b/src/main/scala/amailp/intellij/robot/parser/RobotParser.scala @@ -18,7 +18,7 @@ object RobotParser extends PsiParser { case TestCasesHeader | TasksHeader => parseTableItemsWith(parseTestCaseDefinition); Some(ast.TestCasesTable) case KeywordsHeader => parseTableItemsWith(parseKeywordDefinition); Some(ast.KeywordsTable) case VariablesHeader => parseTableItemsWith(parseVariableDefinition); Some(ast.VariablesTable) - case CommentsHeader => parseTableItemsWithSubParser(CommentsTableParser); Some(ast.CommentsTable) + case CommentsHeader => parseTableItemsWith(parseCommentsTable); Some(ast.CommentsTable) case _ => None } tableType match { @@ -27,6 +27,12 @@ object RobotParser extends PsiParser { } } + def parseCommentsTable(): Unit = { + while (!isHeader(currentType)) { + //val comments_line = currentText + advanceLexer() + } + } def parseHeaderRow(): IElementType = { val headerMark = mark diff --git a/src/test/resources/CommentsTableTest/CommentsTableKeywords.robot b/src/test/resources/CommentsTableTest/CommentsTableKeywords.robot new file mode 100644 index 0000000..5c087b9 --- /dev/null +++ b/src/test/resources/CommentsTableTest/CommentsTableKeywords.robot @@ -0,0 +1,3 @@ +*** Comments *** +Hello World +*** Keywords *** \ No newline at end of file diff --git a/src/test/resources/CommentsTableTest/CommentsTableSettings.robot b/src/test/resources/CommentsTableTest/CommentsTableSettings.robot new file mode 100644 index 0000000..0bce497 --- /dev/null +++ b/src/test/resources/CommentsTableTest/CommentsTableSettings.robot @@ -0,0 +1,3 @@ +*** Comments *** +Hello World +*** Settings *** \ No newline at end of file diff --git a/src/test/resources/CommentsTableTest/CommentsTableTasks.robot b/src/test/resources/CommentsTableTest/CommentsTableTasks.robot new file mode 100644 index 0000000..9a8a028 --- /dev/null +++ b/src/test/resources/CommentsTableTest/CommentsTableTasks.robot @@ -0,0 +1,3 @@ +*** Comments *** +Hello World +*** Tasks *** \ No newline at end of file diff --git a/src/test/resources/CommentsTableTest/CommentsTableTestCases.robot b/src/test/resources/CommentsTableTest/CommentsTableTestCases.robot new file mode 100644 index 0000000..ed6d4d6 --- /dev/null +++ b/src/test/resources/CommentsTableTest/CommentsTableTestCases.robot @@ -0,0 +1,3 @@ +*** Comments *** +Hello World +*** Test Cases *** diff --git a/src/test/resources/CommentsTableTest/CommentsTableVariables.robot b/src/test/resources/CommentsTableTest/CommentsTableVariables.robot new file mode 100644 index 0000000..50df9fc --- /dev/null +++ b/src/test/resources/CommentsTableTest/CommentsTableVariables.robot @@ -0,0 +1,3 @@ +*** Comments *** +Hello World +*** Variables *** \ No newline at end of file diff --git a/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala b/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala new file mode 100644 index 0000000..1c0aa2d --- /dev/null +++ b/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala @@ -0,0 +1,29 @@ +package amailp.intellij.robot.psi.tables + +import amailp.intellij.robot.psi.RobotPsiFile +import amailp.intellij.robot.structureView.RobotTreeBasedStructureViewBuilder +import amailp.intellij.robot.testFramework.RobotCodeInsightFixtureTestCase + +class RobotCommentsTableTest extends RobotCodeInsightFixtureTestCase { + + def testCommentsSetting(): Unit = { + val files = myFixture + .configureByFiles( + "CommentsTableTest/CommentsTableSettings.robot" + ) + .map(_.asInstanceOf[RobotPsiFile]) + + val oneComments = files.head + + val structureViewModel = + new RobotTreeBasedStructureViewBuilder(oneComments).createStructureViewModel(myFixture.getEditor) + + val root = structureViewModel.getRoot + root.getChildren should have size 1 + + + val comments = root.getChildren()(0) + comments.getPresentation.getPresentableText should equal("Comments") + comments.getChildren should have size 1 + } +} diff --git a/src/test/scala/amailp/intellij/robot/testFramework/RobotCodeInsightFixtureTestCase.scala b/src/test/scala/amailp/intellij/robot/testFramework/RobotCodeInsightFixtureTestCase.scala index 3426c57..88f077d 100644 --- a/src/test/scala/amailp/intellij/robot/testFramework/RobotCodeInsightFixtureTestCase.scala +++ b/src/test/scala/amailp/intellij/robot/testFramework/RobotCodeInsightFixtureTestCase.scala @@ -11,10 +11,7 @@ import org.scalatest.matchers.should.Matchers import org.scalatestplus.junit.AssertionsForJUnit @Ignore -class RobotCodeInsightFixtureTestCase - extends BasePlatformTestCase - with Matchers - with AssertionsForJUnit { +class RobotCodeInsightFixtureTestCase extends BasePlatformTestCase with Matchers with AssertionsForJUnit { override def getTestDataPath = new File(this.getClass.getClassLoader.getResource("complete.robot").toURI).getParent From 9f33a7c83a59868e9c11800b297f9572e2d4a3b7 Mon Sep 17 00:00:00 2001 From: aag031 Date: Wed, 2 Dec 2020 11:32:13 +0300 Subject: [PATCH 7/8] remove wrong test --- .../psi/tables/RobotCommentsTableTest.scala | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala diff --git a/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala b/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala deleted file mode 100644 index 1c0aa2d..0000000 --- a/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala +++ /dev/null @@ -1,29 +0,0 @@ -package amailp.intellij.robot.psi.tables - -import amailp.intellij.robot.psi.RobotPsiFile -import amailp.intellij.robot.structureView.RobotTreeBasedStructureViewBuilder -import amailp.intellij.robot.testFramework.RobotCodeInsightFixtureTestCase - -class RobotCommentsTableTest extends RobotCodeInsightFixtureTestCase { - - def testCommentsSetting(): Unit = { - val files = myFixture - .configureByFiles( - "CommentsTableTest/CommentsTableSettings.robot" - ) - .map(_.asInstanceOf[RobotPsiFile]) - - val oneComments = files.head - - val structureViewModel = - new RobotTreeBasedStructureViewBuilder(oneComments).createStructureViewModel(myFixture.getEditor) - - val root = structureViewModel.getRoot - root.getChildren should have size 1 - - - val comments = root.getChildren()(0) - comments.getPresentation.getPresentableText should equal("Comments") - comments.getChildren should have size 1 - } -} From 68292170b9e2d37261ab6a14e40ef550104d629b Mon Sep 17 00:00:00 2001 From: aag031 Date: Wed, 2 Dec 2020 11:49:04 +0300 Subject: [PATCH 8/8] restore tests --- .../psi/tables/RobotCommentsTableTest.scala | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala diff --git a/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala b/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala new file mode 100644 index 0000000..ec10cde --- /dev/null +++ b/src/test/scala/amailp/intellij/robot/psi/tables/RobotCommentsTableTest.scala @@ -0,0 +1,31 @@ +package amailp.intellij.robot.psi.tables + +import amailp.intellij.robot.psi.RobotPsiFile +import amailp.intellij.robot.structureView.RobotTreeBasedStructureViewBuilder +import amailp.intellij.robot.testFramework.RobotCodeInsightFixtureTestCase + +class RobotCommentsTableTest extends RobotCodeInsightFixtureTestCase { + + def testCommentsSetting(): Unit = { + val files = myFixture + .configureByFiles( + "CommentsTableTest/CommentsTableSettings.robot" + ) + .map(_.asInstanceOf[RobotPsiFile]) + + val oneComments = files.head + + val structureViewModel = + new RobotTreeBasedStructureViewBuilder(oneComments).createStructureViewModel(myFixture.getEditor) + + val root = structureViewModel.getRoot + root.getChildren should have size 1 + + + val comments = root.getChildren()(0) + val settings = root.getChildren()(1) + + comments.getPresentation.getPresentableText should equal("Comments") + settings.getPresentation.getPresentableText should equal("Settings") + } +}