diff --git a/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineElementTypes.java b/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineElementTypes.java index 81c73d057785..c0230a875986 100644 --- a/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineElementTypes.java +++ b/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineElementTypes.java @@ -18,6 +18,12 @@ public interface CommandLineElementTypes { IElementType LITERAL_STARTS_FROM_SYMBOL = new IElementType("LITERAL_STARTS_FROM_SYMBOL", null); IElementType LONG_OPTION_NAME_TOKEN = new IElementType("LONG_OPTION_NAME_TOKEN", null); IElementType SHORT_OPTION_NAME_TOKEN = new IElementType("SHORT_OPTION_NAME_TOKEN", null); + IElementType SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT = new IElementType("SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT", null); + IElementType SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER = new IElementType("SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER", null); + IElementType SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL = new IElementType("SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL", null); + IElementType SPACED_LITERAL_STARTS_FROM_DIGIT = new IElementType("SPACED_LITERAL_STARTS_FROM_DIGIT", null); + IElementType SPACED_LITERAL_STARTS_FROM_LETTER = new IElementType("SPACED_LITERAL_STARTS_FROM_LETTER", null); + IElementType SPACED_LITERAL_STARTS_FROM_SYMBOL = new IElementType("SPACED_LITERAL_STARTS_FROM_SYMBOL", null); class Factory { public static PsiElement createElement(ASTNode node) { diff --git a/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineParser.java b/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineParser.java index 84fa8f433273..51f532412eb3 100644 --- a/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineParser.java +++ b/python/gen/com/jetbrains/commandInterface/commandLine/CommandLineParser.java @@ -43,7 +43,9 @@ public class CommandLineParser implements PsiParser, LightPsiParser { } /* ********************************************************** */ - // LITERAL_STARTS_FROM_LETTER | LITERAL_STARTS_FROM_DIGIT | LITERAL_STARTS_FROM_SYMBOL + // LITERAL_STARTS_FROM_LETTER | LITERAL_STARTS_FROM_DIGIT | LITERAL_STARTS_FROM_SYMBOL | + // SPACED_LITERAL_STARTS_FROM_LETTER | SPACED_LITERAL_STARTS_FROM_DIGIT | SPACED_LITERAL_STARTS_FROM_SYMBOL | + // SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER | SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT | SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL public static boolean argument(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "argument")) return false; boolean r; @@ -51,6 +53,12 @@ public class CommandLineParser implements PsiParser, LightPsiParser { r = consumeToken(b, LITERAL_STARTS_FROM_LETTER); if (!r) r = consumeToken(b, LITERAL_STARTS_FROM_DIGIT); if (!r) r = consumeToken(b, LITERAL_STARTS_FROM_SYMBOL); + if (!r) r = consumeToken(b, SPACED_LITERAL_STARTS_FROM_LETTER); + if (!r) r = consumeToken(b, SPACED_LITERAL_STARTS_FROM_DIGIT); + if (!r) r = consumeToken(b, SPACED_LITERAL_STARTS_FROM_SYMBOL); + if (!r) r = consumeToken(b, SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER); + if (!r) r = consumeToken(b, SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT); + if (!r) r = consumeToken(b, SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL); exit_section_(b, l, m, r, false, null); return r; } diff --git a/python/gen/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.java b/python/gen/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.java index c7e305136d32..fb7fb5410633 100644 --- a/python/gen/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.java +++ b/python/gen/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.java @@ -1,9 +1,12 @@ /* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */ package com.jetbrains.commandInterface.commandLine; -import com.intellij.lexer.*; + +import com.intellij.lexer.FlexLexer; import com.intellij.psi.tree.IElementType; -import static com.intellij.psi.TokenType.*; + +import static com.intellij.psi.TokenType.BAD_CHARACTER; +import static com.intellij.psi.TokenType.WHITE_SPACE; import static com.jetbrains.commandInterface.commandLine.CommandLineElementTypes.*; @@ -109,47 +112,47 @@ public class _CommandLineLexer implements FlexLexer { /* The ZZ_CMAP_A table has 3088 entries */ static final char ZZ_CMAP_A[] = zzUnpackCMap( - "\11\0\5\1\22\0\1\1\14\0\1\7\2\6\12\11\1\5\2\0\1\13\3\0\32\4\1\0\1\5\2\0\1"+ - "\3\13\4\3\0\1\12\6\0\1\1\12\0\1\1\11\0\1\2\12\0\1\2\4\0\1\2\5\0\27\2\1\0\12"+ - "\2\4\0\14\2\16\0\5\2\7\0\1\2\1\0\1\2\1\0\5\2\1\0\2\2\2\0\4\2\1\0\1\2\6\0\1"+ - "\2\1\0\3\2\1\0\1\2\1\0\4\2\1\0\23\2\1\0\13\2\10\0\6\2\1\0\26\2\2\0\1\2\6\0"+ - "\10\2\10\0\13\2\5\0\3\2\15\0\12\10\4\0\6\2\1\0\1\2\17\0\2\2\7\0\2\2\12\10"+ - "\3\2\2\0\2\2\1\0\16\2\15\0\11\2\13\0\1\2\16\0\12\10\6\2\4\0\2\2\4\0\1\2\5"+ - "\0\6\2\4\0\1\2\11\0\1\2\3\0\1\2\7\0\11\2\7\0\5\2\17\0\26\2\3\0\1\2\2\0\1\2"+ - "\7\0\12\2\4\0\12\10\1\2\4\0\10\2\2\0\2\2\2\0\26\2\1\0\7\2\1\0\1\2\3\0\4\2"+ - "\3\0\1\2\20\0\1\2\15\0\2\2\1\0\1\2\5\0\6\2\4\0\2\2\1\0\2\2\1\0\2\2\1\0\2\2"+ - "\17\0\4\2\1\0\1\2\7\0\12\10\2\0\3\2\20\0\11\2\1\0\2\2\1\0\2\2\1\0\5\2\3\0"+ - "\1\2\2\0\1\2\30\0\1\2\13\0\10\2\2\0\1\2\3\0\1\2\1\0\6\2\3\0\3\2\1\0\4\2\3"+ - "\0\2\2\1\0\1\2\1\0\2\2\3\0\2\2\3\0\3\2\3\0\14\2\13\0\10\2\1\0\2\2\10\0\3\2"+ - "\5\0\4\2\1\0\5\2\3\0\1\2\3\0\2\2\15\0\13\2\2\0\1\2\21\0\1\2\12\0\6\2\5\0\22"+ - "\2\3\0\10\2\1\0\11\2\1\0\1\2\2\0\7\2\11\0\1\2\1\0\2\2\14\0\12\10\7\0\2\2\1"+ - "\0\1\2\2\0\2\2\1\0\1\2\2\0\1\2\6\0\4\2\1\0\7\2\1\0\3\2\1\0\1\2\1\0\1\2\2\0"+ - "\2\2\1\0\4\2\1\0\2\2\11\0\1\2\2\0\5\2\1\0\1\2\11\0\12\10\2\0\14\2\1\0\24\2"+ - "\13\0\5\2\3\0\6\2\4\0\4\2\3\0\1\2\3\0\2\2\7\0\3\2\4\0\15\2\14\0\1\2\1\0\6"+ - "\2\1\0\1\2\5\0\1\2\2\0\13\2\1\0\15\2\1\0\4\2\2\0\7\2\1\0\1\2\1\0\4\2\2\0\1"+ - "\2\1\0\4\2\2\0\7\2\1\0\1\2\1\0\4\2\2\0\16\2\2\0\6\2\2\0\15\2\2\0\1\2\1\1\17"+ - "\2\1\0\10\2\7\0\15\2\1\0\6\2\23\0\1\2\4\0\1\2\3\0\11\2\1\0\1\2\5\0\17\2\1"+ - "\0\16\2\2\0\14\2\13\0\1\2\15\0\7\2\7\0\16\2\15\0\2\2\12\10\3\0\3\2\11\0\4"+ - "\2\1\0\4\2\3\0\2\2\11\0\10\2\1\0\1\2\1\0\1\2\1\0\1\2\1\0\6\2\1\0\7\2\1\0\1"+ - "\2\3\0\3\2\1\0\7\2\3\0\4\2\2\0\6\2\4\0\13\1\15\0\2\1\5\0\1\1\17\0\1\1\1\0"+ - "\1\2\15\0\1\2\2\0\1\2\4\0\1\2\2\0\12\2\1\0\1\2\3\0\5\2\6\0\1\2\1\0\1\2\1\0"+ - "\1\2\1\0\4\2\1\0\13\2\2\0\4\2\5\0\5\2\4\0\1\2\4\0\2\2\13\0\5\2\6\0\4\2\3\0"+ - "\2\2\14\0\10\2\7\0\10\2\1\0\7\2\1\0\1\1\4\0\2\2\12\0\5\2\5\0\2\2\3\0\7\2\6"+ - "\0\3\2\12\10\2\2\13\0\11\2\2\0\27\2\2\0\7\2\1\0\3\2\1\0\4\2\1\0\4\2\2\0\6"+ - "\2\3\0\1\2\1\0\1\2\2\0\5\2\1\0\12\2\12\10\5\2\1\0\3\2\1\0\10\2\4\0\7\2\3\0"+ - "\1\2\3\0\2\2\1\0\1\2\3\0\2\2\2\0\5\2\2\0\1\2\1\0\1\2\30\0\3\2\3\0\6\2\2\0"+ - "\6\2\2\0\6\2\11\0\7\2\4\0\5\2\3\0\5\2\5\0\1\2\1\0\10\2\1\0\5\2\1\0\1\2\1\0"+ - "\2\2\1\0\2\2\1\0\12\2\6\0\12\2\2\0\6\2\2\0\6\2\2\0\6\2\2\0\3\2\3\0\14\2\1"+ - "\0\16\2\1\0\2\2\1\0\2\2\1\0\10\2\6\0\4\2\4\0\16\2\2\0\1\2\1\0\14\2\1\0\2\2"+ - "\3\0\1\2\2\0\4\2\1\0\2\2\12\0\10\2\6\0\6\2\1\0\3\2\1\0\12\2\3\0\1\2\12\0\4"+ - "\2\13\0\12\10\1\2\1\0\1\2\3\0\7\2\1\0\1\2\1\0\4\2\1\0\17\2\1\0\2\2\14\0\3"+ - "\2\4\0\2\2\1\0\1\2\20\0\4\2\10\0\1\2\13\0\10\2\5\0\3\2\2\0\1\2\2\0\2\2\2\0"+ - "\4\2\1\0\14\2\1\0\1\2\1\0\7\2\1\0\21\2\1\0\4\2\2\0\10\2\1\0\7\2\1\0\14\2\1"+ - "\0\4\2\1\0\5\2\1\0\1\2\3\0\14\2\2\0\13\2\1\0\10\2\2\0\22\10\1\0\2\2\1\0\1"+ - "\2\2\0\1\2\1\0\12\2\1\0\4\2\1\0\1\2\1\0\1\2\6\0\1\2\4\0\1\2\1\0\1\2\1\0\1"+ - "\2\1\0\3\2\1\0\2\2\1\0\1\2\2\0\1\2\1\0\1\2\1\0\1\2\1\0\1\2\1\0\1\2\1\0\2\2"+ - "\1\0\1\2\2\0\4\2\1\0\7\2\1\0\4\2\1\0\4\2\1\0\1\2\1\0\12\2\1\0\5\2\1\0\3\2"+ - "\1\0\5\2\1\0\5\2"); + "\11\0\5\2\22\0\1\2\1\0\1\14\4\0\1\15\5\0\1\10\2\7\12\12\1\6\2\0\1\16\3\0\32"+ + "\5\1\0\1\6\2\0\1\4\13\5\3\0\1\13\6\0\1\1\12\0\1\1\11\0\1\3\12\0\1\3\4\0\1"+ + "\3\5\0\27\3\1\0\12\3\4\0\14\3\16\0\5\3\7\0\1\3\1\0\1\3\1\0\5\3\1\0\2\3\2\0"+ + "\4\3\1\0\1\3\6\0\1\3\1\0\3\3\1\0\1\3\1\0\4\3\1\0\23\3\1\0\13\3\10\0\6\3\1"+ + "\0\26\3\2\0\1\3\6\0\10\3\10\0\13\3\5\0\3\3\15\0\12\11\4\0\6\3\1\0\1\3\17\0"+ + "\2\3\7\0\2\3\12\11\3\3\2\0\2\3\1\0\16\3\15\0\11\3\13\0\1\3\16\0\12\11\6\3"+ + "\4\0\2\3\4\0\1\3\5\0\6\3\4\0\1\3\11\0\1\3\3\0\1\3\7\0\11\3\7\0\5\3\17\0\26"+ + "\3\3\0\1\3\2\0\1\3\7\0\12\3\4\0\12\11\1\3\4\0\10\3\2\0\2\3\2\0\26\3\1\0\7"+ + "\3\1\0\1\3\3\0\4\3\3\0\1\3\20\0\1\3\15\0\2\3\1\0\1\3\5\0\6\3\4\0\2\3\1\0\2"+ + "\3\1\0\2\3\1\0\2\3\17\0\4\3\1\0\1\3\7\0\12\11\2\0\3\3\20\0\11\3\1\0\2\3\1"+ + "\0\2\3\1\0\5\3\3\0\1\3\2\0\1\3\30\0\1\3\13\0\10\3\2\0\1\3\3\0\1\3\1\0\6\3"+ + "\3\0\3\3\1\0\4\3\3\0\2\3\1\0\1\3\1\0\2\3\3\0\2\3\3\0\3\3\3\0\14\3\13\0\10"+ + "\3\1\0\2\3\10\0\3\3\5\0\4\3\1\0\5\3\3\0\1\3\3\0\2\3\15\0\13\3\2\0\1\3\21\0"+ + "\1\3\12\0\6\3\5\0\22\3\3\0\10\3\1\0\11\3\1\0\1\3\2\0\7\3\11\0\1\3\1\0\2\3"+ + "\14\0\12\11\7\0\2\3\1\0\1\3\2\0\2\3\1\0\1\3\2\0\1\3\6\0\4\3\1\0\7\3\1\0\3"+ + "\3\1\0\1\3\1\0\1\3\2\0\2\3\1\0\4\3\1\0\2\3\11\0\1\3\2\0\5\3\1\0\1\3\11\0\12"+ + "\11\2\0\14\3\1\0\24\3\13\0\5\3\3\0\6\3\4\0\4\3\3\0\1\3\3\0\2\3\7\0\3\3\4\0"+ + "\15\3\14\0\1\3\1\0\6\3\1\0\1\3\5\0\1\3\2\0\13\3\1\0\15\3\1\0\4\3\2\0\7\3\1"+ + "\0\1\3\1\0\4\3\2\0\1\3\1\0\4\3\2\0\7\3\1\0\1\3\1\0\4\3\2\0\16\3\2\0\6\3\2"+ + "\0\15\3\2\0\1\3\1\1\17\3\1\0\10\3\7\0\15\3\1\0\6\3\23\0\1\3\4\0\1\3\3\0\11"+ + "\3\1\0\1\3\5\0\17\3\1\0\16\3\2\0\14\3\13\0\1\3\15\0\7\3\7\0\16\3\15\0\2\3"+ + "\12\11\3\0\3\3\11\0\4\3\1\0\4\3\3\0\2\3\11\0\10\3\1\0\1\3\1\0\1\3\1\0\1\3"+ + "\1\0\6\3\1\0\7\3\1\0\1\3\3\0\3\3\1\0\7\3\3\0\4\3\2\0\6\3\4\0\13\1\15\0\2\1"+ + "\5\0\1\1\17\0\1\1\1\0\1\3\15\0\1\3\2\0\1\3\4\0\1\3\2\0\12\3\1\0\1\3\3\0\5"+ + "\3\6\0\1\3\1\0\1\3\1\0\1\3\1\0\4\3\1\0\13\3\2\0\4\3\5\0\5\3\4\0\1\3\4\0\2"+ + "\3\13\0\5\3\6\0\4\3\3\0\2\3\14\0\10\3\7\0\10\3\1\0\7\3\1\0\1\1\4\0\2\3\12"+ + "\0\5\3\5\0\2\3\3\0\7\3\6\0\3\3\12\11\2\3\13\0\11\3\2\0\27\3\2\0\7\3\1\0\3"+ + "\3\1\0\4\3\1\0\4\3\2\0\6\3\3\0\1\3\1\0\1\3\2\0\5\3\1\0\12\3\12\11\5\3\1\0"+ + "\3\3\1\0\10\3\4\0\7\3\3\0\1\3\3\0\2\3\1\0\1\3\3\0\2\3\2\0\5\3\2\0\1\3\1\0"+ + "\1\3\30\0\3\3\3\0\6\3\2\0\6\3\2\0\6\3\11\0\7\3\4\0\5\3\3\0\5\3\5\0\1\3\1\0"+ + "\10\3\1\0\5\3\1\0\1\3\1\0\2\3\1\0\2\3\1\0\12\3\6\0\12\3\2\0\6\3\2\0\6\3\2"+ + "\0\6\3\2\0\3\3\3\0\14\3\1\0\16\3\1\0\2\3\1\0\2\3\1\0\10\3\6\0\4\3\4\0\16\3"+ + "\2\0\1\3\1\0\14\3\1\0\2\3\3\0\1\3\2\0\4\3\1\0\2\3\12\0\10\3\6\0\6\3\1\0\3"+ + "\3\1\0\12\3\3\0\1\3\12\0\4\3\13\0\12\11\1\3\1\0\1\3\3\0\7\3\1\0\1\3\1\0\4"+ + "\3\1\0\17\3\1\0\2\3\14\0\3\3\4\0\2\3\1\0\1\3\20\0\4\3\10\0\1\3\13\0\10\3\5"+ + "\0\3\3\2\0\1\3\2\0\2\3\2\0\4\3\1\0\14\3\1\0\1\3\1\0\7\3\1\0\21\3\1\0\4\3\2"+ + "\0\10\3\1\0\7\3\1\0\14\3\1\0\4\3\1\0\5\3\1\0\1\3\3\0\14\3\2\0\13\3\1\0\10"+ + "\3\2\0\22\11\1\0\2\3\1\0\1\3\2\0\1\3\1\0\12\3\1\0\4\3\1\0\1\3\1\0\1\3\6\0"+ + "\1\3\4\0\1\3\1\0\1\3\1\0\1\3\1\0\3\3\1\0\2\3\1\0\1\3\2\0\1\3\1\0\1\3\1\0\1"+ + "\3\1\0\1\3\1\0\1\3\1\0\2\3\1\0\1\3\2\0\4\3\1\0\7\3\1\0\4\3\1\0\4\3\1\0\1\3"+ + "\1\0\12\3\1\0\5\3\1\0\3\3\1\0\5\3\1\0\5\3"); /** * Translates DFA states to action switch labels. @@ -157,11 +160,12 @@ public class _CommandLineLexer implements FlexLexer { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\1\0\1\1\1\2\1\3\1\4\1\1\1\5\1\6"+ - "\1\7\1\0\1\10"; + "\1\0\1\1\1\2\1\3\1\4\1\1\1\5\2\1"+ + "\1\6\1\7\7\0\1\10\1\11\1\12\1\13\1\14"+ + "\1\15\1\16"; private static int [] zzUnpackAction() { - int [] result = new int[11]; + int [] result = new int[25]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -186,11 +190,13 @@ public class _CommandLineLexer implements FlexLexer { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\14\0\30\0\44\0\60\0\74\0\110\0\14"+ - "\0\14\0\124\0\140"; + "\0\0\0\17\0\36\0\55\0\74\0\113\0\132\0\151"+ + "\0\170\0\17\0\17\0\207\0\226\0\245\0\264\0\303"+ + "\0\322\0\341\0\360\0\17\0\17\0\17\0\17\0\17"+ + "\0\17"; private static int [] zzUnpackRowMap() { - int [] result = new int[11]; + int [] result = new int[25]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -213,15 +219,23 @@ public class _CommandLineLexer implements FlexLexer { private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\2\1\3\1\4\1\2\1\4\1\2\1\5\1\6"+ - "\2\7\1\5\1\10\15\0\1\3\15\0\5\4\1\0"+ - "\1\4\5\0\5\5\1\0\1\5\4\0\1\11\1\0"+ - "\1\11\2\0\1\12\7\0\5\7\1\0\1\7\4\0"+ - "\1\13\1\0\1\13\12\0\2\13\2\0\1\13\1\0"+ - "\1\13\2\0"; + "\1\2\2\3\1\4\1\2\1\4\1\2\1\5\1\6"+ + "\2\7\1\5\1\10\1\11\1\12\20\0\2\3\20\0"+ + "\5\4\1\0\1\4\10\0\5\5\1\0\1\5\7\0"+ + "\1\13\1\0\1\13\2\0\1\14\12\0\5\7\1\0"+ + "\1\7\7\0\1\15\1\0\1\15\1\0\1\16\1\0"+ + "\2\17\1\16\6\0\1\20\1\0\1\20\1\0\1\21"+ + "\1\0\2\22\1\21\6\0\1\23\1\0\1\23\13\0"+ + "\1\15\1\0\5\15\1\0\1\15\1\0\1\24\4\0"+ + "\1\16\1\0\5\16\1\0\1\16\1\0\1\25\4\0"+ + "\1\17\1\0\5\17\1\0\1\17\1\0\1\26\4\0"+ + "\1\20\1\0\5\20\1\0\1\20\2\0\1\27\3\0"+ + "\1\21\1\0\5\21\1\0\1\21\2\0\1\30\3\0"+ + "\1\22\1\0\5\22\1\0\1\22\2\0\1\31\5\0"+ + "\2\23\2\0\1\23\1\0\1\23\4\0"; private static int [] zzUnpackTrans() { - int [] result = new int[108]; + int [] result = new int[255]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -259,10 +273,10 @@ public class _CommandLineLexer implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\11\5\1\2\11\1\0\1\1"; + "\1\0\1\11\7\1\2\11\7\0\1\1\6\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[11]; + int [] result = new int[25]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -570,35 +584,59 @@ public class _CommandLineLexer implements FlexLexer { case 1: { return BAD_CHARACTER; } - case 9: break; + case 15: break; case 2: { return WHITE_SPACE; } - case 10: break; + case 16: break; case 3: { return LITERAL_STARTS_FROM_LETTER; } - case 11: break; + case 17: break; case 4: { return LITERAL_STARTS_FROM_SYMBOL; } - case 12: break; + case 18: break; case 5: { return LITERAL_STARTS_FROM_DIGIT; } - case 13: break; + case 19: break; case 6: { return EQ; } - case 14: break; + case 20: break; case 7: { return SHORT_OPTION_NAME_TOKEN; } - case 15: break; + case 21: break; case 8: { return LONG_OPTION_NAME_TOKEN; } - case 16: break; + case 22: break; + case 9: + { return SPACED_LITERAL_STARTS_FROM_LETTER; + } + case 23: break; + case 10: + { return SPACED_LITERAL_STARTS_FROM_SYMBOL; + } + case 24: break; + case 11: + { return SPACED_LITERAL_STARTS_FROM_DIGIT; + } + case 25: break; + case 12: + { return SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER; + } + case 26: break; + case 13: + { return SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL; + } + case 27: break; + case 14: + { return SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT; + } + case 28: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineArgument.java b/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineArgument.java index 02d91dff0f79..64f043d0bb0f 100644 --- a/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineArgument.java +++ b/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineArgument.java @@ -20,6 +20,24 @@ public interface CommandLineArgument extends CommandLinePart { @Nullable PsiElement getLiteralStartsFromSymbol(); + @Nullable + PsiElement getSingleQSpacedLiteralStartsFromDigit(); + + @Nullable + PsiElement getSingleQSpacedLiteralStartsFromLetter(); + + @Nullable + PsiElement getSingleQSpacedLiteralStartsFromSymbol(); + + @Nullable + PsiElement getSpacedLiteralStartsFromDigit(); + + @Nullable + PsiElement getSpacedLiteralStartsFromLetter(); + + @Nullable + PsiElement getSpacedLiteralStartsFromSymbol(); + @Nullable Option findOptionForOptionArgument(); @@ -29,4 +47,7 @@ public interface CommandLineArgument extends CommandLinePart { @Nullable Help findBestHelp(); + @NotNull + String getValueNoQuotes(); + } diff --git a/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineOption.java b/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineOption.java index 467fb4a9a3f8..b5e691ce3584 100644 --- a/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineOption.java +++ b/python/gen/com/jetbrains/commandInterface/commandLine/psi/CommandLineOption.java @@ -24,4 +24,7 @@ public interface CommandLineOption extends CommandLinePart { @Nullable Option findRealOption(); + @Nullable + CommandLineArgument findArgument(); + } diff --git a/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineArgumentImpl.java b/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineArgumentImpl.java index 3bdc0f09430d..43a66de1ee61 100644 --- a/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineArgumentImpl.java +++ b/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineArgumentImpl.java @@ -47,6 +47,42 @@ public class CommandLineArgumentImpl extends CommandLineElement implements Comma return findChildByType(LITERAL_STARTS_FROM_SYMBOL); } + @Override + @Nullable + public PsiElement getSingleQSpacedLiteralStartsFromDigit() { + return findChildByType(SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT); + } + + @Override + @Nullable + public PsiElement getSingleQSpacedLiteralStartsFromLetter() { + return findChildByType(SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER); + } + + @Override + @Nullable + public PsiElement getSingleQSpacedLiteralStartsFromSymbol() { + return findChildByType(SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL); + } + + @Override + @Nullable + public PsiElement getSpacedLiteralStartsFromDigit() { + return findChildByType(SPACED_LITERAL_STARTS_FROM_DIGIT); + } + + @Override + @Nullable + public PsiElement getSpacedLiteralStartsFromLetter() { + return findChildByType(SPACED_LITERAL_STARTS_FROM_LETTER); + } + + @Override + @Nullable + public PsiElement getSpacedLiteralStartsFromSymbol() { + return findChildByType(SPACED_LITERAL_STARTS_FROM_SYMBOL); + } + @Nullable public Option findOptionForOptionArgument() { return CommandLinePsiImplUtils.findOptionForOptionArgument(this); @@ -62,4 +98,9 @@ public class CommandLineArgumentImpl extends CommandLineElement implements Comma return CommandLinePsiImplUtils.findBestHelp(this); } + @NotNull + public String getValueNoQuotes() { + return CommandLinePsiImplUtils.getValueNoQuotes(this); + } + } diff --git a/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineOptionImpl.java b/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineOptionImpl.java index dbfb17896c45..53cc7eeb2f1f 100644 --- a/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineOptionImpl.java +++ b/python/gen/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLineOptionImpl.java @@ -54,4 +54,9 @@ public class CommandLineOptionImpl extends CommandLineElement implements Command return CommandLinePsiImplUtils.findRealOption(this); } + @Nullable + public CommandLineArgument findArgument() { + return CommandLinePsiImplUtils.findArgument(this); + } + } diff --git a/python/src/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.flex b/python/src/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.flex index 3a67a142e79c..21b90331e648 100644 --- a/python/src/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.flex +++ b/python/src/com/jetbrains/commandInterface/commandLine/_CommandLineLexer.flex @@ -1,7 +1,10 @@ package com.jetbrains.commandInterface.commandLine; -import com.intellij.lexer.*; + +import com.intellij.lexer.FlexLexer; import com.intellij.psi.tree.IElementType; -import static com.intellij.psi.TokenType.*; + +import static com.intellij.psi.TokenType.BAD_CHARACTER; +import static com.intellij.psi.TokenType.WHITE_SPACE; import static com.jetbrains.commandInterface.commandLine.CommandLineElementTypes.*; %% @@ -19,25 +22,40 @@ import static com.jetbrains.commandInterface.commandLine.CommandLineElementTypes %type IElementType %unicode +EOL=\R WHITE_SPACE=\s+ +SPACE=[ \t\n\x0B\f\r]+ LITERAL_STARTS_FROM_LETTER=[:letter:]([a-zA-Z_0-9]|:|\\|"/"|\.|-)* LITERAL_STARTS_FROM_DIGIT=[:digit:]([a-zA-Z_0-9]|:|\\|"/"|\.|-)* LITERAL_STARTS_FROM_SYMBOL=([/\~\.]([a-zA-Z_0-9]|:|\\|"/"|\.|-)*) +SPACED_LITERAL_STARTS_FROM_LETTER=\"[:letter:]([a-zA-Z_0-9]|:|\\|"/"|\.|-|[ \t\n\x0B\f\r])*\" +SPACED_LITERAL_STARTS_FROM_DIGIT=\"[:digit:]([a-zA-Z_0-9]|:|\\|"/"|\.|-|[ \t\n\x0B\f\r])*\" +SPACED_LITERAL_STARTS_FROM_SYMBOL=\"([/\~\.]([a-zA-Z_0-9]|:|\\|"/"|\.|-|[ \t\n\x0B\f\r])*)\" +SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER='[:letter:]([a-zA-Z_0-9]|:|\\|"/"|\.|-|[ \t\n\x0B\f\r])*' +SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT='[:digit:]([a-zA-Z_0-9]|:|\\|"/"|\.|-|[ \t\n\x0B\f\r])*' +SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL='([/\~\.]([a-zA-Z_0-9]|:|\\|"/"|\.|-|[ \t\n\x0B\f\r])*)' SHORT_OPTION_NAME_TOKEN=-[:letter:] LONG_OPTION_NAME_TOKEN=--[:letter:](-|[a-zA-Z_0-9])* %% { - {WHITE_SPACE} { return WHITE_SPACE; } + {WHITE_SPACE} { return WHITE_SPACE; } - "=" { return EQ; } + "=" { return EQ; } - {LITERAL_STARTS_FROM_LETTER} { return LITERAL_STARTS_FROM_LETTER; } - {LITERAL_STARTS_FROM_DIGIT} { return LITERAL_STARTS_FROM_DIGIT; } - {LITERAL_STARTS_FROM_SYMBOL} { return LITERAL_STARTS_FROM_SYMBOL; } - {SHORT_OPTION_NAME_TOKEN} { return SHORT_OPTION_NAME_TOKEN; } - {LONG_OPTION_NAME_TOKEN} { return LONG_OPTION_NAME_TOKEN; } + {SPACE} { return SPACE; } + {LITERAL_STARTS_FROM_LETTER} { return LITERAL_STARTS_FROM_LETTER; } + {LITERAL_STARTS_FROM_DIGIT} { return LITERAL_STARTS_FROM_DIGIT; } + {LITERAL_STARTS_FROM_SYMBOL} { return LITERAL_STARTS_FROM_SYMBOL; } + {SPACED_LITERAL_STARTS_FROM_LETTER} { return SPACED_LITERAL_STARTS_FROM_LETTER; } + {SPACED_LITERAL_STARTS_FROM_DIGIT} { return SPACED_LITERAL_STARTS_FROM_DIGIT; } + {SPACED_LITERAL_STARTS_FROM_SYMBOL} { return SPACED_LITERAL_STARTS_FROM_SYMBOL; } + {SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER} { return SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER; } + {SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT} { return SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT; } + {SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL} { return SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL; } + {SHORT_OPTION_NAME_TOKEN} { return SHORT_OPTION_NAME_TOKEN; } + {LONG_OPTION_NAME_TOKEN} { return LONG_OPTION_NAME_TOKEN; } } diff --git a/python/src/com/jetbrains/commandInterface/commandLine/command_line.bnf b/python/src/com/jetbrains/commandInterface/commandLine/command_line.bnf index 8fff17590842..d007fa9c9666 100644 --- a/python/src/com/jetbrains/commandInterface/commandLine/command_line.bnf +++ b/python/src/com/jetbrains/commandInterface/commandLine/command_line.bnf @@ -28,6 +28,18 @@ LITERAL_STARTS_FROM_LETTER='regexp:\p{Alpha}(\w|:|\\|/|\.|-)*' LITERAL_STARTS_FROM_DIGIT='regexp:\p{Digit}(\w|:|\\|/|\.|-)*' LITERAL_STARTS_FROM_SYMBOL='regexp:([/\~\.](\w|:|\\|/|\.|-)*)' + + SPACED_LITERAL_STARTS_FROM_LETTER='regexp:"\p{Alpha}(\w|:|\\|/|\.|-|\s)*"' + SPACED_LITERAL_STARTS_FROM_DIGIT='regexp:"\p{Digit}(\w|:|\\|/|\.|-|\s)*"' + SPACED_LITERAL_STARTS_FROM_SYMBOL='regexp:"([/\~\.](\w|:|\\|/|\.|-|\s)*)"' + + + SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER="regexp:'\p{Alpha}(\w|:|\\|/|\.|-|\s)*'" + SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT="regexp:'\p{Digit}(\w|:|\\|/|\.|-|\s)*'" + SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL="regexp:'([/\~\.](\w|:|\\|/|\.|-|\s)*)'" + + + SHORT_OPTION_NAME_TOKEN='regexp:-\p{Alpha}' LONG_OPTION_NAME_TOKEN='regexp:--\p{Alpha}(-|\w)*' ] @@ -37,10 +49,13 @@ root ::= command (argument | option ) * <> command ::= LITERAL_STARTS_FROM_LETTER option ::= (short_option_name <> ? | long_option_name <> ?) { -methods=[ getOptionName isLong findRealOption ] +methods=[ getOptionName isLong findRealOption findArgument ] } private short_option_name ::= SHORT_OPTION_NAME_TOKEN private long_option_name ::= LONG_OPTION_NAME_TOKEN -argument ::= LITERAL_STARTS_FROM_LETTER | LITERAL_STARTS_FROM_DIGIT | LITERAL_STARTS_FROM_SYMBOL { -methods=[ findOptionForOptionArgument findRealArgument findBestHelp ] +argument ::= LITERAL_STARTS_FROM_LETTER | LITERAL_STARTS_FROM_DIGIT | LITERAL_STARTS_FROM_SYMBOL | +SPACED_LITERAL_STARTS_FROM_LETTER | SPACED_LITERAL_STARTS_FROM_DIGIT | SPACED_LITERAL_STARTS_FROM_SYMBOL | +SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER | SINGLE_Q_SPACED_LITERAL_STARTS_FROM_DIGIT | SINGLE_Q_SPACED_LITERAL_STARTS_FROM_SYMBOL +{ +methods=[ findOptionForOptionArgument findRealArgument findBestHelp getValueNoQuotes ] } diff --git a/python/src/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLinePsiImplUtils.java b/python/src/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLinePsiImplUtils.java index 8d7948360a6d..82f3b205977d 100644 --- a/python/src/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLinePsiImplUtils.java +++ b/python/src/com/jetbrains/commandInterface/commandLine/psi/impl/CommandLinePsiImplUtils.java @@ -24,6 +24,7 @@ import com.jetbrains.commandInterface.commandLine.ValidationResult; import com.jetbrains.commandInterface.commandLine.psi.CommandLineArgument; import com.jetbrains.commandInterface.commandLine.psi.CommandLineFile; import com.jetbrains.commandInterface.commandLine.psi.CommandLineOption; +import com.jetbrains.python.psi.PyUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -50,6 +51,18 @@ final class CommandLinePsiImplUtils { return o.getLongOptionNameToken() != null; } + /** + * For options with eq finds argument next to it. + * For options with out of eq just use next psi + * @return null if option does not have eq + */ + @Nullable + static CommandLineArgument findArgument(@NotNull final CommandLineOption option) { + if (option.getText().endsWith("=")) { + return PyUtil.as(option.getNextSibling(), CommandLineArgument.class); + } + return null; + } /** * Finds real option based on psi opton * @@ -65,7 +78,18 @@ final class CommandLinePsiImplUtils { return validationResult.getOption(option); } - + /** + * @return for arg in quotes returns bare value, or simply value otherwise + */ + @NotNull + static String getValueNoQuotes(@NotNull final CommandLineArgument argument) { + final char[] chars = argument.getText().toCharArray(); + final char firstChar = chars[0]; + if (firstChar == chars[chars.length - 1] && firstChar == '"' || firstChar == '\'') { + return argument.getText().substring(1, argument.getTextLength() - 1); + } + return argument.getText(); + } /** * Tries to find appropriate help for argument. It can be argument help for positional argument or option help * for option argument. diff --git a/python/testData/commandLine/spaces.cmdline b/python/testData/commandLine/spaces.cmdline new file mode 100644 index 000000000000..a968b0fece4f --- /dev/null +++ b/python/testData/commandLine/spaces.cmdline @@ -0,0 +1 @@ +fake_command "spam and eggs" chicken --with=ketchup --with='russian mustard' \ No newline at end of file diff --git a/python/testData/commandLine/spaces.txt b/python/testData/commandLine/spaces.txt new file mode 100644 index 000000000000..b08603e6c11c --- /dev/null +++ b/python/testData/commandLine/spaces.txt @@ -0,0 +1,21 @@ +FILE + CommandLineCommandImpl(COMMAND) + PsiElement(LITERAL_STARTS_FROM_LETTER)('fake_command') + PsiWhiteSpace(' ') + CommandLineArgumentImpl(ARGUMENT) + PsiElement(SPACED_LITERAL_STARTS_FROM_LETTER)('"spam and eggs"') + PsiWhiteSpace(' ') + CommandLineArgumentImpl(ARGUMENT) + PsiElement(LITERAL_STARTS_FROM_LETTER)('chicken') + PsiWhiteSpace(' ') + CommandLineOptionImpl(OPTION) + PsiElement(LONG_OPTION_NAME_TOKEN)('--with') + PsiElement(=)('=') + CommandLineArgumentImpl(ARGUMENT) + PsiElement(LITERAL_STARTS_FROM_LETTER)('ketchup') + PsiWhiteSpace(' ') + CommandLineOptionImpl(OPTION) + PsiElement(LONG_OPTION_NAME_TOKEN)('--with') + PsiElement(=)('=') + CommandLineArgumentImpl(ARGUMENT) + PsiElement(SINGLE_Q_SPACED_LITERAL_STARTS_FROM_LETTER)(''russian mustard'') \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/commandInterface/commandLine/CommandLineParserTest.java b/python/testSrc/com/jetbrains/commandInterface/commandLine/CommandLineParserTest.java index f14d8be5dcdc..9f8996f3c07c 100644 --- a/python/testSrc/com/jetbrains/commandInterface/commandLine/CommandLineParserTest.java +++ b/python/testSrc/com/jetbrains/commandInterface/commandLine/CommandLineParserTest.java @@ -17,6 +17,9 @@ package com.jetbrains.commandInterface.commandLine; import com.intellij.testFramework.ParsingTestCase; +import com.jetbrains.commandInterface.commandLine.psi.CommandLineArgument; +import com.jetbrains.commandInterface.commandLine.psi.CommandLineFile; +import org.junit.Assert; /** @@ -34,6 +37,14 @@ public final class CommandLineParserTest extends ParsingTestCase { return CommandTestTools.TEST_PATH; } + public void testSpaces() throws Exception { + doTest(true); + final CommandLineFile commandLineFile = (CommandLineFile)myFile; + Assert.assertEquals("Bad argument value", "spam and eggs", commandLineFile.getArguments().iterator().next().getValueNoQuotes()); + final CommandLineArgument optionArgument = commandLineFile.getOptions().iterator().next().findArgument(); + Assert.assertNotNull("No option argument found", optionArgument); + Assert.assertEquals("Bad option argument value", "ketchup", optionArgument.getValueNoQuotes()); + } /** * Should be ok