mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
WEB-11957 Valid JavaScript regexp marked as red
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* The following code was generated by JFlex 1.4.3 on 4/26/14 1:54 PM */
|
||||
/* The following code was generated by JFlex 1.4.3 on 4/29/14 2:27 PM */
|
||||
|
||||
/* It's an automatically generated code. Do not modify it. */
|
||||
package org.intellij.lang.regexp;
|
||||
@@ -15,8 +15,8 @@ import com.intellij.psi.StringEscapesTokenTypes;
|
||||
/**
|
||||
* This class is a scanner generated by
|
||||
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
|
||||
* on 4/26/14 1:54 PM from the specification file
|
||||
* <tt>/Users/ignatov/src/ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex</tt>
|
||||
* on 4/29/14 2:27 PM from the specification file
|
||||
* <tt>C:/idea_src/ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex</tt>
|
||||
*/
|
||||
class _RegExLexer implements FlexLexer {
|
||||
/** initial size of the lookahead buffer */
|
||||
@@ -377,6 +377,7 @@ class _RegExLexer implements FlexLexer {
|
||||
private boolean allowNestedCharacterClasses;
|
||||
private boolean allowOctalNoLeadingZero;
|
||||
private boolean allowHexDigitClass;
|
||||
private boolean allowEmptyCharacterClass;
|
||||
|
||||
_RegExLexer(EnumSet<RegExpCapability> capabilities) {
|
||||
this((java.io.Reader)null);
|
||||
@@ -386,6 +387,7 @@ class _RegExLexer implements FlexLexer {
|
||||
this.allowOctalNoLeadingZero = capabilities.contains(RegExpCapability.OCTAL_NO_LEADING_ZERO);
|
||||
this.commentMode = capabilities.contains(RegExpCapability.COMMENT_MODE);
|
||||
this.allowHexDigitClass = capabilities.contains(RegExpCapability.ALLOW_HEX_DIGIT_CLASS);
|
||||
this.allowEmptyCharacterClass = capabilities.contains(RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS);
|
||||
}
|
||||
|
||||
private void yypushstate(int state) {
|
||||
@@ -787,6 +789,18 @@ class _RegExLexer implements FlexLexer {
|
||||
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
|
||||
}
|
||||
case 107: break;
|
||||
case 65:
|
||||
// lookahead expression with fixed base length
|
||||
zzMarkedPos = zzStartRead + 1;
|
||||
{ if (allowEmptyCharacterClass) {
|
||||
yypushstate(CLASS1PY);
|
||||
}
|
||||
else {
|
||||
yypushstate(CLASS2);
|
||||
}
|
||||
return RegExpTT.CLASS_BEGIN;
|
||||
}
|
||||
case 108: break;
|
||||
case 28:
|
||||
{ if (allowNestedCharacterClasses) {
|
||||
yypushstate(CLASS2);
|
||||
@@ -794,87 +808,75 @@ class _RegExLexer implements FlexLexer {
|
||||
}
|
||||
return RegExpTT.CHARACTER;
|
||||
}
|
||||
case 108: break;
|
||||
case 109: break;
|
||||
case 19:
|
||||
{ if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER;
|
||||
}
|
||||
case 109: break;
|
||||
case 110: break;
|
||||
case 50:
|
||||
{ yypushstate(PROP); return RegExpTT.PROPERTY;
|
||||
}
|
||||
case 110: break;
|
||||
case 111: break;
|
||||
case 8:
|
||||
{ yypushstate(CLASS2);
|
||||
return RegExpTT.CLASS_BEGIN;
|
||||
}
|
||||
case 111: break;
|
||||
case 112: break;
|
||||
case 70:
|
||||
{ return RegExpTT.POS_LOOKBEHIND;
|
||||
}
|
||||
case 112: break;
|
||||
case 113: break;
|
||||
case 42:
|
||||
{ return yystate() != CLASS2 ? RegExpTT.BACKREF : RegExpTT.ESC_CHARACTER;
|
||||
}
|
||||
case 113: break;
|
||||
case 114: break;
|
||||
case 72:
|
||||
{ return RegExpTT.HEX_CHAR;
|
||||
}
|
||||
case 114: break;
|
||||
case 115: break;
|
||||
case 1:
|
||||
{ handleOptions(); return RegExpTT.OPTIONS_ON;
|
||||
}
|
||||
case 115: break;
|
||||
case 116: break;
|
||||
case 58:
|
||||
{ return allowNestedCharacterClasses ? RegExpTT.ANDAND : RegExpTT.CHARACTER;
|
||||
}
|
||||
case 116: break;
|
||||
case 117: break;
|
||||
case 2:
|
||||
{ yypopstate(); return RegExpTT.COMMENT;
|
||||
}
|
||||
case 117: break;
|
||||
case 118: break;
|
||||
case 17:
|
||||
{ return RegExpTT.MINUS;
|
||||
}
|
||||
case 118: break;
|
||||
case 119: break;
|
||||
case 46:
|
||||
{ return RegExpTT.ESC_CTRL_CHARACTER;
|
||||
}
|
||||
case 119: break;
|
||||
case 120: break;
|
||||
case 32:
|
||||
{ yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE;
|
||||
}
|
||||
case 120: break;
|
||||
case 121: break;
|
||||
case 13:
|
||||
{ return RegExpTT.QUEST;
|
||||
}
|
||||
case 121: break;
|
||||
case 122: break;
|
||||
case 54:
|
||||
{ return (allowHexDigitClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN);
|
||||
}
|
||||
case 122: break;
|
||||
case 123: break;
|
||||
case 15:
|
||||
{ return RegExpTT.PLUS;
|
||||
}
|
||||
case 123: break;
|
||||
case 124: break;
|
||||
case 66:
|
||||
{ return RegExpTT.OCT_CHAR;
|
||||
}
|
||||
case 124: break;
|
||||
case 125: break;
|
||||
case 38:
|
||||
{ yybegin(YYINITIAL); return RegExpTT.QUOTE;
|
||||
}
|
||||
case 125: break;
|
||||
case 65:
|
||||
// lookahead expression with fixed base length
|
||||
zzMarkedPos = zzStartRead + 1;
|
||||
{ if (!allowNestedCharacterClasses) {
|
||||
yypushstate(CLASS1PY);
|
||||
}
|
||||
else {
|
||||
yypushstate(CLASS2);
|
||||
}
|
||||
return RegExpTT.CLASS_BEGIN;
|
||||
}
|
||||
case 126: break;
|
||||
case 20:
|
||||
{ if (allowDanglingMetacharacters) {
|
||||
|
||||
@@ -26,4 +26,5 @@ public enum RegExpCapability {
|
||||
OMIT_NUMBERS_IN_QUANTIFIERS,
|
||||
COMMENT_MODE,
|
||||
ALLOW_HEX_DIGIT_CLASS,
|
||||
ALLOW_EMPTY_CHARACTER_CLASS,
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.intellij.psi.StringEscapesTokenTypes;
|
||||
private boolean allowNestedCharacterClasses;
|
||||
private boolean allowOctalNoLeadingZero;
|
||||
private boolean allowHexDigitClass;
|
||||
private boolean allowEmptyCharacterClass;
|
||||
|
||||
_RegExLexer(EnumSet<RegExpCapability> capabilities) {
|
||||
this((java.io.Reader)null);
|
||||
@@ -41,6 +42,7 @@ import com.intellij.psi.StringEscapesTokenTypes;
|
||||
this.allowOctalNoLeadingZero = capabilities.contains(RegExpCapability.OCTAL_NO_LEADING_ZERO);
|
||||
this.commentMode = capabilities.contains(RegExpCapability.COMMENT_MODE);
|
||||
this.allowHexDigitClass = capabilities.contains(RegExpCapability.ALLOW_HEX_DIGIT_CLASS);
|
||||
this.allowEmptyCharacterClass = capabilities.contains(RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS);
|
||||
}
|
||||
|
||||
private void yypushstate(int state) {
|
||||
@@ -217,7 +219,7 @@ HEX_CHAR=[0-9a-fA-F]
|
||||
return RegExpTT.CLASS_BEGIN; }
|
||||
|
||||
/* Python understands that, Java doesn't */
|
||||
{LBRACKET} / "^" {RBRACKET} { if (!allowNestedCharacterClasses) {
|
||||
{LBRACKET} / "^" {RBRACKET} { if (allowEmptyCharacterClass) {
|
||||
yypushstate(CLASS1PY);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -8,5 +8,8 @@
|
||||
</extensions>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<patterns.patternClass className="com.intellij.lang.javascript.patterns.JSPatterns" alias="js"/>
|
||||
<lang.parserDefinition language="JSRegexp" implementationClass="com.intellij.lang.javascript.inject.JSRegexpParserDefinition"/>
|
||||
<regExpLanguageHost forClass="com.intellij.lang.javascript.psi.impl.JSLiteralExpressionImpl"
|
||||
implementationClass="com.intellij.lang.javascript.inject.JSRegexpHost"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
+2
-1
@@ -33,7 +33,8 @@ public class PythonRegexpParserDefinition extends RegExpParserDefinition {
|
||||
public static final IFileElementType PYTHON_REGEXP_FILE = new IFileElementType("PYTHON_REGEXP_FILE", PythonRegexpLanguage.INSTANCE);
|
||||
protected final EnumSet<RegExpCapability> CAPABILITIES = EnumSet.of(RegExpCapability.DANGLING_METACHARACTERS,
|
||||
RegExpCapability.OCTAL_NO_LEADING_ZERO,
|
||||
RegExpCapability.OMIT_NUMBERS_IN_QUANTIFIERS);
|
||||
RegExpCapability.OMIT_NUMBERS_IN_QUANTIFIERS,
|
||||
RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS);
|
||||
|
||||
@NotNull
|
||||
public Lexer createLexer(Project project) {
|
||||
|
||||
Reference in New Issue
Block a user