diff --git a/python/src/META-INF/python-plugin-common.xml b/python/src/META-INF/python-plugin-common.xml
index 0804d1cab196..6417e740ad8e 100644
--- a/python/src/META-INF/python-plugin-common.xml
+++ b/python/src/META-INF/python-plugin-common.xml
@@ -510,9 +510,9 @@
-
-
-
+
+
+
+
@@ -533,6 +535,14 @@
+
+
+
+
+
+
diff --git a/python/src/com/jetbrains/python/PyBundle.properties b/python/src/com/jetbrains/python/PyBundle.properties
index f27805a79c8f..3ef2e3522c15 100644
--- a/python/src/com/jetbrains/python/PyBundle.properties
+++ b/python/src/com/jetbrains/python/PyBundle.properties
@@ -56,6 +56,7 @@ QFIX.augment.assignment=Assignment can be replaced with augmented assignment
QFIX.chained.comparison=Simplify chained comparison
QFIX.statement.effect=Statement can be replaced with function call
+QFIX.statement.effect.move.docstring=Move docstring to the proper place
QFIX.statement.effect.introduce.variable=Introduce variable
diff --git a/python/src/com/jetbrains/python/actions/StatementEffectDocstringQuickFix.java b/python/src/com/jetbrains/python/actions/StatementEffectDocstringQuickFix.java
new file mode 100644
index 000000000000..962351c943ad
--- /dev/null
+++ b/python/src/com/jetbrains/python/actions/StatementEffectDocstringQuickFix.java
@@ -0,0 +1,53 @@
+package com.jetbrains.python.actions;
+
+import com.intellij.codeInspection.LocalQuickFix;
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.jetbrains.python.PyBundle;
+import com.jetbrains.python.psi.*;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * User: catherine
+ *
+ * QuickFix to move misplaced docstring
+ */
+public class StatementEffectDocstringQuickFix implements LocalQuickFix {
+
+ public StatementEffectDocstringQuickFix() {
+ }
+
+ @NotNull
+ public String getName() {
+ return PyBundle.message("QFIX.statement.effect.move.docstring");
+ }
+
+ @NotNull
+ public String getFamilyName() {
+ return PyBundle.message("INSP.GROUP.python");
+ }
+
+ public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
+ PsiElement expression = descriptor.getPsiElement();
+ if (expression instanceof PyStringLiteralExpression) {
+ PyStatement st = PsiTreeUtil.getParentOfType(expression, PyStatement.class);
+ if (st != null) {
+ PyDocStringOwner parent = PsiTreeUtil.getParentOfType(expression, PyDocStringOwner.class);
+
+ if (parent instanceof PyClass || parent instanceof PyFunction) {
+ PyStatementList statementList = PsiTreeUtil.findChildOfType(parent, PyStatementList.class);
+ if (statementList != null) {
+ PyStatement[] statements = statementList.getStatements();
+ if (statements.length > 0) {
+ statementList.addBefore(st, statements[0]);
+ st.delete();
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/python/src/com/jetbrains/python/buildout/config/BuildoutCfgHighlighterFactory.java b/python/src/com/jetbrains/python/buildout/config/BuildoutCfgHighlighterFactory.java
index b562d6b610b2..bdff316a9ad4 100644
--- a/python/src/com/jetbrains/python/buildout/config/BuildoutCfgHighlighterFactory.java
+++ b/python/src/com/jetbrains/python/buildout/config/BuildoutCfgHighlighterFactory.java
@@ -4,7 +4,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
-import com.jetbrains.django.lang.template.highlighting.DjangoTemplateFileHighlighter;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/python/src/com/jetbrains/python/codeInsight/completion/PyClassInsertHandler.java b/python/src/com/jetbrains/python/codeInsight/completion/PyClassInsertHandler.java
index 9773766953e6..c6d28d8e8f5c 100644
--- a/python/src/com/jetbrains/python/codeInsight/completion/PyClassInsertHandler.java
+++ b/python/src/com/jetbrains/python/codeInsight/completion/PyClassInsertHandler.java
@@ -1,10 +1,8 @@
package com.jetbrains.python.codeInsight.completion;
import com.intellij.codeInsight.AutoPopupController;
-import com.intellij.codeInsight.TailType;
import com.intellij.codeInsight.completion.InsertHandler;
import com.intellij.codeInsight.completion.InsertionContext;
-import com.intellij.codeInsight.lookup.Lookup;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
@@ -38,8 +36,5 @@ public class PyClassInsertHandler implements InsertHandler {
editor.getCaretModel().moveToOffset(offset+2);
}
}
- else if (context.getCompletionChar() == Lookup.COMPLETE_STATEMENT_SELECT_CHAR) {
- TailType.SMART_COMPLETION.processTail(editor, context.getTailOffset());
- }
}
}
diff --git a/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java b/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java
index 4cd4d716ba42..84a6a71babf9 100644
--- a/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java
+++ b/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java
@@ -4,10 +4,7 @@ import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.psi.PsiElementVisitor;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.actions.PyDefaultArgumentQuickFix;
-import com.jetbrains.python.psi.PyDictLiteralExpression;
-import com.jetbrains.python.psi.PyExpression;
-import com.jetbrains.python.psi.PyListLiteralExpression;
-import com.jetbrains.python.psi.PyNamedParameter;
+import com.jetbrains.python.psi.*;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -41,6 +38,11 @@ public class PyDefaultArgumentInspection extends PyInspection {
if (defaultValue instanceof PyListLiteralExpression || defaultValue instanceof PyDictLiteralExpression) {
registerProblem(defaultValue, "Default argument value is mutable", new PyDefaultArgumentQuickFix());
}
+ if (defaultValue instanceof PyCallExpression) {
+ PyExpression callee = ((PyCallExpression)defaultValue).getCallee();
+ if (callee != null && "dict".equals(callee.getText()))
+ registerProblem(defaultValue, "Default argument value is mutable", new PyDefaultArgumentQuickFix());
+ }
}
}
}
diff --git a/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java b/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java
index f9332e3fbdb3..e85560cb8256 100644
--- a/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java
+++ b/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java
@@ -6,6 +6,7 @@ import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.ResolveResult;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.python.PyBundle;
+import com.jetbrains.python.actions.StatementEffectDocstringQuickFix;
import com.jetbrains.python.actions.StatementEffectFunctionCallQuickFix;
import com.jetbrains.python.actions.StatementEffectIntroduceVariableQuickFix;
import com.jetbrains.python.console.PydevConsoleRunner;
@@ -64,10 +65,24 @@ public class PyStatementEffectInspection extends PyInspection {
return;
}
}
+ if (checkStringLiteral(expression))
+ return;
registerProblem(expression, "Statement seems to have no effect",
new StatementEffectIntroduceVariableQuickFix(expression));
}
+ private boolean checkStringLiteral(PyExpression expression) {
+ if (expression instanceof PyStringLiteralExpression) {
+ PyDocStringOwner parent = PsiTreeUtil.getParentOfType(expression, PyFunction.class, PyClass.class);
+ if (parent != null && parent.getDocStringExpression() == null) {
+ registerProblem(expression, "Docstring seems to be misplaced",
+ new StatementEffectDocstringQuickFix());
+ return true;
+ }
+ }
+ return false;
+ }
+
private boolean hasEffect(@Nullable PyExpression expression) {
if (expression == null) {
return false;
diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex
index ffb2894332ac..ae1cddcbbefc 100644
--- a/python/src/com/jetbrains/python/lexer/Python.flex
+++ b/python/src/com/jetbrains/python/lexer/Python.flex
@@ -171,7 +171,8 @@ return yylength()-i-1;
"}" { return PyTokenTypes.RBRACE; }
"@" { return PyTokenTypes.AT; }
"," { return PyTokenTypes.COMMA; }
-":" { yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; }
+":" { return PyTokenTypes.COLON; }
+":"(\ )*"\n" { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; }
"." { return PyTokenTypes.DOT; }
"`" { return PyTokenTypes.TICK; }
"=" { return PyTokenTypes.EQ; }
diff --git a/python/src/com/jetbrains/python/lexer/_PythonLexer.java b/python/src/com/jetbrains/python/lexer/_PythonLexer.java
index 4d264e1b841c..c74dffbfb43b 100644
--- a/python/src/com/jetbrains/python/lexer/_PythonLexer.java
+++ b/python/src/com/jetbrains/python/lexer/_PythonLexer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 7/14/11 7:46 PM */
+/* The following code was generated by JFlex 1.4.3 on 9/15/11 2:15 PM */
/* It's an automatically generated code. Do not modify it. */
package com.jetbrains.python.lexer;
@@ -12,7 +12,7 @@ import com.intellij.openapi.util.text.StringUtil;
/**
* This class is a scanner generated by
* JFlex 1.4.3
- * on 7/14/11 7:46 PM from the specification file
+ * on 9/15/11 2:15 PM from the specification file
* ./Python.flex
*/
class _PythonLexer implements FlexLexer {
@@ -226,19 +226,19 @@ class _PythonLexer implements FlexLexer {
"\1\13\1\47\1\0\1\50\3\14\1\51\4\14\1\52"+
"\2\14\6\17\7\14\1\53\1\54\1\55\5\14\1\56"+
"\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+
- "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\11"+
- "\1\76\1\77\1\0\1\76\3\13\1\47\1\0\1\100"+
- "\11\14\1\17\2\101\1\102\1\14\1\103\1\104\1\105"+
- "\1\106\7\14\1\107\1\110\1\111\1\112\1\0\2\77"+
- "\1\0\1\113\4\14\1\114\1\115\2\14\4\0\4\14"+
- "\1\116\3\14\1\0\2\76\1\0\1\14\1\117\3\14"+
- "\1\120\1\0\2\101\1\0\2\14\1\121\1\14\1\122"+
- "\1\14\1\123\3\76\1\14\1\124\1\125\1\126\3\101"+
- "\1\127\1\14\1\130\1\131\2\0\1\132\2\0\1\14"+
- "\2\76\2\101\1\133";
+ "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76"+
+ "\1\0\1\11\1\77\1\100\1\0\1\77\3\13\1\47"+
+ "\1\0\1\101\11\14\1\17\2\102\1\103\1\14\1\104"+
+ "\1\105\1\106\1\107\7\14\1\110\1\111\1\112\1\113"+
+ "\1\0\2\100\1\0\1\114\4\14\1\115\1\116\2\14"+
+ "\4\0\4\14\1\117\3\14\1\0\2\77\1\0\1\14"+
+ "\1\120\3\14\1\121\1\0\2\102\1\0\2\14\1\122"+
+ "\1\14\1\123\1\14\1\124\3\77\1\14\1\125\1\126"+
+ "\1\127\3\102\1\130\1\14\1\131\1\132\2\0\1\133"+
+ "\2\0\1\14\2\77\2\102\1\134";
private static int [] zzUnpackAction() {
- int [] result = new int[240];
+ int [] result = new int[242];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -270,32 +270,33 @@ class _PythonLexer implements FlexLexer {
"\0\u0708\0\u0750\0\u0798\0\u07e0\0\u0828\0\u0870\0\u08b8\0\u0900"+
"\0\u0948\0\u0990\0\u09d8\0\u0a20\0\u0a68\0\u0ab0\0\u0af8\0\u0b40"+
"\0\u0b88\0\u0bd0\0\u0c18\0\u0c60\0\330\0\330\0\330\0\330"+
- "\0\330\0\330\0\330\0\330\0\330\0\330\0\330\0\330"+
- "\0\u01b0\0\u0ca8\0\u0cf0\0\u0d38\0\330\0\u0d80\0\u0dc8\0\u0e10"+
- "\0\u0e58\0\u0ea0\0\u0ee8\0\u0f30\0\u0f78\0\330\0\u0fc0\0\u1008"+
- "\0\330\0\u1050\0\u1098\0\u10e0\0\u0360\0\u1128\0\u1170\0\u11b8"+
- "\0\u1200\0\330\0\u1248\0\u1290\0\u12d8\0\u1320\0\u1368\0\u13b0"+
- "\0\u13f8\0\u1440\0\u1488\0\u14d0\0\u1518\0\u1560\0\u15a8\0\u15f0"+
- "\0\u1638\0\u0360\0\u0360\0\u0360\0\u1680\0\u16c8\0\u1710\0\u1758"+
- "\0\u17a0\0\330\0\330\0\330\0\u17e8\0\330\0\u1830\0\330"+
- "\0\330\0\330\0\330\0\330\0\u1878\0\330\0\330\0\u18c0"+
- "\0\330\0\u1908\0\u1950\0\330\0\u1908\0\u1998\0\u19e0\0\u1a28"+
- "\0\u1a70\0\u1ab8\0\u1b00\0\u0360\0\u1b48\0\u1b90\0\u1bd8\0\u1c20"+
- "\0\u1c68\0\u1cb0\0\u1cf8\0\u1d40\0\u1d88\0\330\0\u1dd0\0\u1e18"+
- "\0\u0360\0\u1e60\0\u0360\0\u0360\0\u0360\0\u0360\0\u1ea8\0\u1ef0"+
- "\0\u1f38\0\u1f80\0\u1fc8\0\u2010\0\u2058\0\330\0\330\0\330"+
- "\0\330\0\u20a0\0\u20e8\0\u2130\0\u2178\0\u0360\0\u21c0\0\u2208"+
- "\0\u2250\0\u2298\0\u0360\0\u0360\0\u22e0\0\u2328\0\u2370\0\u23b8"+
- "\0\u2400\0\u2448\0\u2490\0\u24d8\0\u2520\0\u2568\0\u0360\0\u25b0"+
- "\0\u25f8\0\u2640\0\u2688\0\u26d0\0\u2718\0\u2760\0\u27a8\0\u0360"+
- "\0\u27f0\0\u2838\0\u2880\0\u0360\0\u28c8\0\u2910\0\u2958\0\u29a0"+
- "\0\u29e8\0\u2a30\0\u0360\0\u2a78\0\u0360\0\u2ac0\0\u0360\0\u1908"+
- "\0\u2b08\0\u2b50\0\u2b98\0\u0360\0\u0360\0\u0360\0\330\0\u2be0"+
- "\0\u2c28\0\u0360\0\u2c70\0\u0360\0\u0360\0\u2cb8\0\u2d00\0\u0360"+
- "\0\u2d48\0\u2d90\0\u2dd8\0\u2688\0\u2760\0\u28c8\0\u29a0\0\u0360";
+ "\0\330\0\330\0\330\0\330\0\330\0\u0ca8\0\330\0\330"+
+ "\0\u01b0\0\u0cf0\0\u0d38\0\u0d80\0\330\0\u0dc8\0\u0e10\0\u0e58"+
+ "\0\u0ea0\0\u0ee8\0\u0f30\0\u0f78\0\u0fc0\0\330\0\u1008\0\u1050"+
+ "\0\330\0\u1098\0\u10e0\0\u1128\0\u0360\0\u1170\0\u11b8\0\u1200"+
+ "\0\u1248\0\330\0\u1290\0\u12d8\0\u1320\0\u1368\0\u13b0\0\u13f8"+
+ "\0\u1440\0\u1488\0\u14d0\0\u1518\0\u1560\0\u15a8\0\u15f0\0\u1638"+
+ "\0\u1680\0\u0360\0\u0360\0\u0360\0\u16c8\0\u1710\0\u1758\0\u17a0"+
+ "\0\u17e8\0\330\0\330\0\330\0\u1830\0\330\0\u1878\0\330"+
+ "\0\330\0\330\0\330\0\330\0\u18c0\0\330\0\330\0\u1908"+
+ "\0\330\0\330\0\u0ca8\0\u1950\0\u1998\0\330\0\u1950\0\u19e0"+
+ "\0\u1a28\0\u1a70\0\u1ab8\0\u1b00\0\u1b48\0\u0360\0\u1b90\0\u1bd8"+
+ "\0\u1c20\0\u1c68\0\u1cb0\0\u1cf8\0\u1d40\0\u1d88\0\u1dd0\0\330"+
+ "\0\u1e18\0\u1e60\0\u0360\0\u1ea8\0\u0360\0\u0360\0\u0360\0\u0360"+
+ "\0\u1ef0\0\u1f38\0\u1f80\0\u1fc8\0\u2010\0\u2058\0\u20a0\0\330"+
+ "\0\330\0\330\0\330\0\u20e8\0\u2130\0\u2178\0\u21c0\0\u0360"+
+ "\0\u2208\0\u2250\0\u2298\0\u22e0\0\u0360\0\u0360\0\u2328\0\u2370"+
+ "\0\u23b8\0\u2400\0\u2448\0\u2490\0\u24d8\0\u2520\0\u2568\0\u25b0"+
+ "\0\u0360\0\u25f8\0\u2640\0\u2688\0\u26d0\0\u2718\0\u2760\0\u27a8"+
+ "\0\u27f0\0\u0360\0\u2838\0\u2880\0\u28c8\0\u0360\0\u2910\0\u2958"+
+ "\0\u29a0\0\u29e8\0\u2a30\0\u2a78\0\u0360\0\u2ac0\0\u0360\0\u2b08"+
+ "\0\u0360\0\u1950\0\u2b50\0\u2b98\0\u2be0\0\u0360\0\u0360\0\u0360"+
+ "\0\330\0\u2c28\0\u2c70\0\u0360\0\u2cb8\0\u0360\0\u0360\0\u2d00"+
+ "\0\u2d48\0\u0360\0\u2d90\0\u2dd8\0\u2e20\0\u26d0\0\u27a8\0\u2910"+
+ "\0\u29e8\0\u0360";
private static int [] zzUnpackRowMap() {
- int [] result = new int[240];
+ int [] result = new int[242];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -374,136 +375,136 @@ class _PythonLexer implements FlexLexer {
"\1\163\107\0\1\164\1\165\106\0\1\166\1\0\1\167"+
"\105\0\1\170\107\0\1\171\107\0\1\172\107\0\1\173"+
"\107\0\1\174\6\0\1\175\100\0\1\176\6\0\1\177"+
- "\1\200\77\0\1\201\25\0\13\102\1\0\20\102\1\202"+
- "\1\104\1\102\1\105\50\102\34\0\1\203\1\204\1\0"+
- "\1\105\2\205\45\0\1\105\110\102\13\106\1\0\21\106"+
- "\1\107\1\202\1\105\160\106\35\0\1\204\1\206\1\105"+
- "\2\205\45\0\1\105\1\0\1\111\1\112\1\111\1\0"+
- "\1\111\3\0\1\116\7\0\1\116\1\0\1\117\2\120"+
- "\1\0\1\121\61\0\3\112\1\0\1\112\15\0\1\117"+
- "\2\120\1\0\1\121\61\0\5\207\2\0\1\207\4\0"+
- "\1\207\2\0\1\207\3\0\2\207\15\0\1\207\1\0"+
- "\1\207\3\0\1\207\37\0\1\210\1\0\1\210\1\0"+
- "\1\210\103\0\1\211\3\0\1\211\103\0\3\117\1\0"+
- "\1\117\16\0\2\120\1\0\1\121\61\0\3\212\1\0"+
- "\1\212\20\0\1\213\32\0\1\213\27\0\11\24\2\0"+
- "\7\24\1\0\2\24\1\0\4\24\1\214\7\0\16\24"+
- "\30\0\6\24\1\215\2\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\16\24\30\0\11\24\2\0\7\24"+
- "\1\0\2\24\1\0\5\24\7\0\1\24\1\216\14\24"+
- "\30\0\11\24\2\0\7\24\1\0\1\217\1\24\1\0"+
- "\5\24\1\36\1\0\1\37\4\0\16\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\12\24"+
- "\1\220\3\24\30\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\6\24\1\221\7\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\3\24"+
- "\1\222\3\24\1\223\6\24\30\0\11\24\2\0\7\24"+
- "\1\0\2\24\1\0\5\24\7\0\4\24\1\224\11\24"+
- "\30\0\11\24\2\0\7\24\1\0\2\24\1\0\5\24"+
- "\7\0\7\24\1\225\6\24\27\0\13\135\1\0\20\135"+
- "\1\226\1\137\1\135\1\0\50\135\34\0\1\227\53\0"+
- "\110\135\13\140\1\0\21\140\1\141\1\226\1\0\160\140"+
- "\36\0\1\230\52\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\2\24\1\231\13\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\3\24"+
- "\1\232\12\24\30\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\4\24\1\233\11\24\30\0\3\24"+
- "\1\234\4\24\1\235\2\0\7\24\1\0\2\24\1\0"+
- "\5\24\7\0\16\24\30\0\11\24\2\0\7\24\1\0"+
- "\2\24\1\0\5\24\7\0\11\24\1\236\4\24\30\0"+
+ "\1\200\77\0\1\201\64\0\1\202\1\203\47\0\13\102"+
+ "\1\0\20\102\1\204\1\104\1\102\1\105\50\102\34\0"+
+ "\1\205\1\206\1\0\1\105\2\207\45\0\1\105\110\102"+
+ "\13\106\1\0\21\106\1\107\1\204\1\105\160\106\35\0"+
+ "\1\206\1\210\1\105\2\207\45\0\1\105\1\0\1\111"+
+ "\1\112\1\111\1\0\1\111\3\0\1\116\7\0\1\116"+
+ "\1\0\1\117\2\120\1\0\1\121\61\0\3\112\1\0"+
+ "\1\112\15\0\1\117\2\120\1\0\1\121\61\0\5\211"+
+ "\2\0\1\211\4\0\1\211\2\0\1\211\3\0\2\211"+
+ "\15\0\1\211\1\0\1\211\3\0\1\211\37\0\1\212"+
+ "\1\0\1\212\1\0\1\212\103\0\1\213\3\0\1\213"+
+ "\103\0\3\117\1\0\1\117\16\0\2\120\1\0\1\121"+
+ "\61\0\3\214\1\0\1\214\20\0\1\215\32\0\1\215"+
+ "\27\0\11\24\2\0\7\24\1\0\2\24\1\0\4\24"+
+ "\1\216\7\0\16\24\30\0\6\24\1\217\2\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\16\24\30\0"+
"\11\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
- "\1\24\1\237\14\24\30\0\11\24\2\0\7\24\1\0"+
- "\2\24\1\0\5\24\7\0\1\240\15\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\10\24"+
- "\1\241\5\24\30\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\3\24\1\242\12\24\30\0\11\24"+
- "\2\0\7\24\1\0\1\243\1\24\1\0\5\24\7\0"+
- "\16\24\30\0\6\24\1\244\2\24\2\0\7\24\1\0"+
- "\2\24\1\0\5\24\7\0\16\24\30\0\11\24\2\0"+
- "\7\24\1\0\2\24\1\0\5\24\7\0\7\24\1\245"+
- "\6\24\111\0\1\246\107\0\1\247\107\0\1\250\107\0"+
- "\1\251\62\0\1\204\1\0\1\105\2\205\45\0\1\105"+
- "\34\203\1\252\1\253\52\203\35\206\1\254\1\255\51\206"+
- "\1\0\5\207\2\0\1\207\1\116\3\0\1\207\2\0"+
- "\1\207\1\116\2\0\2\207\15\0\1\207\1\0\1\207"+
- "\3\0\1\207\37\0\1\210\1\0\1\210\1\0\1\210"+
- "\3\0\1\116\7\0\1\116\67\0\1\211\3\0\1\211"+
- "\3\0\1\116\7\0\1\116\67\0\3\212\1\0\1\212"+
- "\21\0\1\121\61\0\3\212\1\0\1\212\103\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\12\24"+
- "\1\256\3\24\30\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\1\257\15\24\30\0\11\24\2\0"+
- "\7\24\1\0\2\24\1\0\5\24\7\0\1\260\15\24"+
- "\30\0\7\24\1\261\1\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\16\24\30\0\11\24\2\0\7\24"+
- "\1\0\1\262\1\24\1\0\5\24\7\0\16\24\30\0"+
- "\11\24\2\0\7\24\1\0\1\263\1\24\1\0\5\24"+
- "\7\0\16\24\30\0\3\24\1\264\5\24\2\0\7\24"+
+ "\1\24\1\220\14\24\30\0\11\24\2\0\7\24\1\0"+
+ "\1\221\1\24\1\0\5\24\1\36\1\0\1\37\4\0"+
+ "\16\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\12\24\1\222\3\24\30\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\6\24\1\223"+
+ "\7\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\3\24\1\224\3\24\1\225\6\24\30\0"+
+ "\11\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
+ "\4\24\1\226\11\24\30\0\11\24\2\0\7\24\1\0"+
+ "\2\24\1\0\5\24\7\0\7\24\1\227\6\24\27\0"+
+ "\13\135\1\0\20\135\1\230\1\137\1\135\1\0\50\135"+
+ "\34\0\1\231\53\0\110\135\13\140\1\0\21\140\1\141"+
+ "\1\230\1\0\160\140\36\0\1\232\52\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\2\24\1\233"+
+ "\13\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\3\24\1\234\12\24\30\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\4\24\1\235"+
+ "\11\24\30\0\3\24\1\236\4\24\1\237\2\0\7\24"+
"\1\0\2\24\1\0\5\24\7\0\16\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\2\24\1\265\2\24"+
- "\7\0\16\24\30\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\3\24\1\266\12\24\27\0\34\227"+
- "\1\267\1\270\52\227\35\230\1\271\1\272\51\230\1\0"+
- "\11\24\2\0\7\24\1\0\1\273\1\24\1\0\5\24"+
- "\7\0\16\24\30\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\4\24\1\274\11\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\3\24"+
- "\1\275\12\24\30\0\6\24\1\276\2\24\2\0\7\24"+
- "\1\0\2\24\1\0\5\24\7\0\16\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\3\24"+
- "\1\277\12\24\30\0\10\24\1\300\2\0\7\24\1\0"+
- "\2\24\1\0\5\24\7\0\16\24\30\0\7\24\1\301"+
- "\1\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
- "\16\24\30\0\10\24\1\302\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\16\24\27\0\34\203\1\303\1\304"+
- "\162\203\145\206\1\305\1\306\51\206\1\0\10\24\1\307"+
+ "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\11\24"+
+ "\1\240\4\24\30\0\11\24\2\0\7\24\1\0\2\24"+
+ "\1\0\5\24\7\0\1\24\1\241\14\24\30\0\11\24"+
+ "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\1\242"+
+ "\15\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\10\24\1\243\5\24\30\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\3\24\1\244"+
+ "\12\24\30\0\11\24\2\0\7\24\1\0\1\245\1\24"+
+ "\1\0\5\24\7\0\16\24\30\0\6\24\1\246\2\24"+
"\2\0\7\24\1\0\2\24\1\0\5\24\7\0\16\24"+
"\30\0\11\24\2\0\7\24\1\0\2\24\1\0\5\24"+
- "\7\0\5\24\1\310\10\24\30\0\11\24\2\0\7\24"+
- "\1\0\2\24\1\0\5\24\7\0\2\24\1\311\13\24"+
+ "\7\0\7\24\1\247\6\24\111\0\1\250\107\0\1\251"+
+ "\107\0\1\252\107\0\1\253\62\0\1\206\1\0\1\105"+
+ "\2\207\45\0\1\105\34\205\1\254\1\255\52\205\35\210"+
+ "\1\256\1\257\51\210\1\0\5\211\2\0\1\211\1\116"+
+ "\3\0\1\211\2\0\1\211\1\116\2\0\2\211\15\0"+
+ "\1\211\1\0\1\211\3\0\1\211\37\0\1\212\1\0"+
+ "\1\212\1\0\1\212\3\0\1\116\7\0\1\116\67\0"+
+ "\1\213\3\0\1\213\3\0\1\116\7\0\1\116\67\0"+
+ "\3\214\1\0\1\214\21\0\1\121\61\0\3\214\1\0"+
+ "\1\214\103\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\12\24\1\260\3\24\30\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\1\261\15\24"+
"\30\0\11\24\2\0\7\24\1\0\2\24\1\0\5\24"+
- "\7\0\10\24\1\312\5\24\30\0\11\24\2\0\7\24"+
- "\1\0\2\24\1\0\4\24\1\313\7\0\16\24\30\0"+
- "\11\24\2\0\7\24\1\0\1\314\1\24\1\0\5\24"+
- "\7\0\16\24\27\0\34\227\1\315\1\316\162\227\145\230"+
- "\1\317\1\320\51\230\1\0\11\24\2\0\7\24\1\0"+
- "\2\24\1\0\4\24\1\321\7\0\16\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\7\24"+
- "\1\322\6\24\30\0\11\24\2\0\7\24\1\0\2\24"+
- "\1\0\5\24\7\0\3\24\1\323\12\24\30\0\11\24"+
- "\2\0\7\24\1\0\2\24\1\0\4\24\1\324\7\0"+
+ "\7\0\1\262\15\24\30\0\7\24\1\263\1\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\16\24\30\0"+
+ "\11\24\2\0\7\24\1\0\1\264\1\24\1\0\5\24"+
+ "\7\0\16\24\30\0\11\24\2\0\7\24\1\0\1\265"+
+ "\1\24\1\0\5\24\7\0\16\24\30\0\3\24\1\266"+
+ "\5\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
"\16\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
- "\5\24\7\0\2\24\1\325\13\24\30\0\11\24\2\0"+
- "\7\24\1\0\2\24\1\0\5\24\7\0\1\326\15\24"+
- "\30\0\11\24\2\0\7\24\1\0\1\327\1\24\1\0"+
- "\5\24\7\0\16\24\27\0\34\203\1\330\1\304\106\203"+
- "\1\331\1\304\52\203\35\206\1\305\1\332\106\206\1\305"+
- "\1\330\51\206\1\0\10\24\1\333\2\0\7\24\1\0"+
- "\2\24\1\0\5\24\7\0\16\24\30\0\11\24\2\0"+
- "\7\24\1\0\2\24\1\0\5\24\7\0\1\334\15\24"+
+ "\2\24\1\267\2\24\7\0\16\24\30\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\3\24\1\270"+
+ "\12\24\27\0\34\231\1\271\1\272\52\231\35\232\1\273"+
+ "\1\274\51\232\1\0\11\24\2\0\7\24\1\0\1\275"+
+ "\1\24\1\0\5\24\7\0\16\24\30\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\4\24\1\276"+
+ "\11\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\3\24\1\277\12\24\30\0\6\24\1\300"+
+ "\2\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
+ "\16\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\3\24\1\301\12\24\30\0\10\24\1\302"+
+ "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\16\24"+
+ "\30\0\7\24\1\303\1\24\2\0\7\24\1\0\2\24"+
+ "\1\0\5\24\7\0\16\24\30\0\10\24\1\304\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\16\24\27\0"+
+ "\34\205\1\305\1\306\162\205\145\210\1\307\1\310\51\210"+
+ "\1\0\10\24\1\311\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\16\24\30\0\11\24\2\0\7\24\1\0"+
+ "\2\24\1\0\5\24\7\0\5\24\1\312\10\24\30\0"+
+ "\11\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
+ "\2\24\1\313\13\24\30\0\11\24\2\0\7\24\1\0"+
+ "\2\24\1\0\5\24\7\0\10\24\1\314\5\24\30\0"+
+ "\11\24\2\0\7\24\1\0\2\24\1\0\4\24\1\315"+
+ "\7\0\16\24\30\0\11\24\2\0\7\24\1\0\1\316"+
+ "\1\24\1\0\5\24\7\0\16\24\27\0\34\231\1\317"+
+ "\1\320\162\231\145\232\1\321\1\322\51\232\1\0\11\24"+
+ "\2\0\7\24\1\0\2\24\1\0\4\24\1\323\7\0"+
+ "\16\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\5\24\7\0\7\24\1\324\6\24\30\0\11\24\2\0"+
+ "\7\24\1\0\2\24\1\0\5\24\7\0\3\24\1\325"+
+ "\12\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+
+ "\4\24\1\326\7\0\16\24\30\0\11\24\2\0\7\24"+
+ "\1\0\2\24\1\0\5\24\7\0\2\24\1\327\13\24"+
"\30\0\11\24\2\0\7\24\1\0\2\24\1\0\5\24"+
- "\7\0\4\24\1\335\11\24\30\0\11\24\2\0\7\24"+
- "\1\0\2\24\1\0\5\24\7\0\1\24\1\336\14\24"+
- "\27\0\34\227\1\337\1\316\106\227\1\340\1\316\52\227"+
- "\35\230\1\317\1\341\106\230\1\317\1\337\51\230\1\0"+
+ "\7\0\1\330\15\24\30\0\11\24\2\0\7\24\1\0"+
+ "\1\331\1\24\1\0\5\24\7\0\16\24\27\0\34\205"+
+ "\1\332\1\306\106\205\1\333\1\306\52\205\35\210\1\307"+
+ "\1\334\106\210\1\307\1\332\51\210\1\0\10\24\1\335"+
+ "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\16\24"+
+ "\30\0\11\24\2\0\7\24\1\0\2\24\1\0\5\24"+
+ "\7\0\1\336\15\24\30\0\11\24\2\0\7\24\1\0"+
+ "\2\24\1\0\5\24\7\0\4\24\1\337\11\24\30\0"+
"\11\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
- "\4\24\1\342\11\24\30\0\11\24\2\0\7\24\1\0"+
- "\2\24\1\0\5\24\7\0\1\24\1\343\14\24\30\0"+
- "\11\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
- "\4\24\1\344\11\24\30\0\10\24\1\345\2\0\7\24"+
- "\1\0\2\24\1\0\5\24\7\0\16\24\27\0\34\203"+
- "\1\346\1\304\52\203\35\206\1\305\1\347\51\206\1\0"+
- "\11\24\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
- "\11\24\1\350\4\24\27\0\34\227\1\351\1\316\52\227"+
- "\35\230\1\317\1\352\51\230\1\0\11\24\2\0\7\24"+
- "\1\0\2\24\1\0\2\24\1\353\2\24\7\0\16\24"+
- "\27\0\34\203\1\354\1\304\52\203\35\206\1\305\1\355"+
- "\51\206\34\227\1\356\1\316\52\227\35\230\1\317\1\357"+
- "\51\230\1\0\11\24\2\0\7\24\1\0\1\360\1\24"+
- "\1\0\5\24\7\0\16\24\27\0";
+ "\1\24\1\340\14\24\27\0\34\231\1\341\1\320\106\231"+
+ "\1\342\1\320\52\231\35\232\1\321\1\343\106\232\1\321"+
+ "\1\341\51\232\1\0\11\24\2\0\7\24\1\0\2\24"+
+ "\1\0\5\24\7\0\4\24\1\344\11\24\30\0\11\24"+
+ "\2\0\7\24\1\0\2\24\1\0\5\24\7\0\1\24"+
+ "\1\345\14\24\30\0\11\24\2\0\7\24\1\0\2\24"+
+ "\1\0\5\24\7\0\4\24\1\346\11\24\30\0\10\24"+
+ "\1\347\2\0\7\24\1\0\2\24\1\0\5\24\7\0"+
+ "\16\24\27\0\34\205\1\350\1\306\52\205\35\210\1\307"+
+ "\1\351\51\210\1\0\11\24\2\0\7\24\1\0\2\24"+
+ "\1\0\5\24\7\0\11\24\1\352\4\24\27\0\34\231"+
+ "\1\353\1\320\52\231\35\232\1\321\1\354\51\232\1\0"+
+ "\11\24\2\0\7\24\1\0\2\24\1\0\2\24\1\355"+
+ "\2\24\7\0\16\24\27\0\34\205\1\356\1\306\52\205"+
+ "\35\210\1\307\1\357\51\210\34\231\1\360\1\320\52\231"+
+ "\35\232\1\321\1\361\51\232\1\0\11\24\2\0\7\24"+
+ "\1\0\1\362\1\24\1\0\5\24\7\0\16\24\27\0";
private static int [] zzUnpackTrans() {
- int [] result = new int[11808];
+ int [] result = new int[11880];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -544,17 +545,17 @@ class _PythonLexer implements FlexLexer {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
- "\3\0\1\11\1\1\6\11\4\1\1\11\44\1\14\11"+
- "\1\0\3\1\1\11\4\1\4\0\1\11\1\1\1\0"+
- "\1\11\10\1\1\11\27\1\3\11\1\1\1\11\1\1"+
- "\5\11\1\1\2\11\1\1\1\11\2\1\1\11\1\0"+
- "\5\1\1\0\12\1\1\11\17\1\4\11\1\0\2\1"+
- "\1\0\11\1\4\0\10\1\1\0\2\1\1\0\6\1"+
- "\1\0\2\1\1\0\16\1\1\11\6\1\2\0\1\1"+
- "\2\0\6\1";
+ "\3\0\1\11\1\1\6\11\4\1\1\11\44\1\11\11"+
+ "\1\1\2\11\1\0\3\1\1\11\4\1\4\0\1\11"+
+ "\1\1\1\0\1\11\10\1\1\11\27\1\3\11\1\1"+
+ "\1\11\1\1\5\11\1\1\2\11\1\1\2\11\1\0"+
+ "\2\1\1\11\1\0\5\1\1\0\12\1\1\11\17\1"+
+ "\4\11\1\0\2\1\1\0\11\1\4\0\10\1\1\0"+
+ "\2\1\1\0\6\1\1\0\2\1\1\0\16\1\1\11"+
+ "\6\1\2\0\1\1\2\0\6\1";
private static int [] zzUnpackAttribute() {
- int [] result = new int[240];
+ int [] result = new int[242];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -866,372 +867,376 @@ return yylength()-i-1;
zzMarkedPos = zzMarkedPosL;
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
- case 82:
+ case 83:
{ return PyTokenTypes.YIELD_KEYWORD;
}
- case 92: break;
+ case 93: break;
case 11:
{ return PyTokenTypes.INTEGER_LITERAL;
}
- case 93: break;
+ case 94: break;
case 19:
{ return PyTokenTypes.DIV;
}
- case 94: break;
+ case 95: break;
case 20:
{ return PyTokenTypes.PERC;
}
- case 95: break;
+ case 96: break;
case 3:
{ return PyTokenTypes.BACKSLASH;
}
- case 96: break;
+ case 97: break;
case 28:
{ return PyTokenTypes.RPAR;
}
- case 97: break;
+ case 98: break;
case 10:
{ return PyTokenTypes.BAD_CHARACTER;
}
- case 98: break;
+ case 99: break;
case 31:
{ return PyTokenTypes.LBRACE;
}
- case 99: break;
- case 63:
+ case 100: break;
+ case 64:
{ yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING;
}
- case 100: break;
+ case 101: break;
case 14:
{ return PyTokenTypes.MINUS;
}
- case 101: break;
- case 79:
+ case 102: break;
+ case 80:
{ return PyTokenTypes.BREAK_KEYWORD;
}
- case 102: break;
+ case 103: break;
case 30:
{ return PyTokenTypes.RBRACKET;
}
- case 103: break;
+ case 104: break;
case 1:
{ yypushback(1); yybegin(PENDING_DOCSTRING);
}
- case 104: break;
+ case 105: break;
case 8:
{ yypushback(1); yybegin(USUAL);
}
- case 105: break;
+ case 106: break;
case 13:
{ return PyTokenTypes.DOT;
}
- case 106: break;
+ case 107: break;
case 12:
{ return PyTokenTypes.IDENTIFIER;
}
- case 107: break;
+ case 108: break;
case 27:
{ return PyTokenTypes.LPAR;
}
- case 108: break;
+ case 109: break;
case 25:
{ return PyTokenTypes.LT;
}
- case 109: break;
+ case 110: break;
case 44:
{ return PyTokenTypes.IN_KEYWORD;
}
- case 110: break;
- case 80:
+ case 111: break;
+ case 81:
{ return PyTokenTypes.RAISE_KEYWORD;
}
- case 111: break;
- case 73:
+ case 112: break;
+ case 74:
{ return PyTokenTypes.GTGTEQ;
}
- case 112: break;
+ case 113: break;
case 5:
{ return PyTokenTypes.SPACE;
}
- case 113: break;
- case 85:
+ case 114: break;
+ case 86:
{ return PyTokenTypes.EXCEPT_KEYWORD;
}
- case 114: break;
+ case 115: break;
case 40:
{ return PyTokenTypes.IMAGINARY_LITERAL;
}
- case 115: break;
+ case 116: break;
case 15:
{ return PyTokenTypes.SINGLE_QUOTED_STRING;
}
- case 116: break;
+ case 117: break;
case 7:
{ return PyTokenTypes.FORMFEED;
}
- case 117: break;
+ case 118: break;
case 37:
{ return PyTokenTypes.SEMICOLON;
}
- case 118: break;
+ case 119: break;
case 24:
{ return PyTokenTypes.GT;
}
- case 119: break;
+ case 120: break;
case 29:
{ return PyTokenTypes.LBRACKET;
}
- case 120: break;
- case 74:
+ case 121: break;
+ case 35:
+ { return PyTokenTypes.COLON;
+ }
+ case 122: break;
+ case 75:
{ return PyTokenTypes.LTLTEQ;
}
- case 121: break;
+ case 123: break;
case 9:
{ if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING;
else yybegin(USUAL); return PyTokenTypes.SINGLE_QUOTED_STRING;
}
- case 122: break;
- case 76:
+ case 124: break;
+ case 77:
{ return PyTokenTypes.ELSE_KEYWORD;
}
- case 123: break;
+ case 125: break;
case 22:
{ return PyTokenTypes.OR;
}
- case 124: break;
+ case 126: break;
case 48:
{ return PyTokenTypes.MULTEQ;
}
- case 125: break;
- case 90:
+ case 127: break;
+ case 91:
{ return PyTokenTypes.FINALLY_KEYWORD;
}
- case 126: break;
- case 83:
+ case 128: break;
+ case 84:
{ return PyTokenTypes.WHILE_KEYWORD;
}
- case 127: break;
+ case 129: break;
case 18:
{ return PyTokenTypes.MULT;
}
- case 128: break;
- case 87:
+ case 130: break;
+ case 88:
{ return PyTokenTypes.ASSERT_KEYWORD;
}
- case 129: break;
+ case 131: break;
case 51:
{ return PyTokenTypes.FLOORDIV;
}
- case 130: break;
- case 89:
+ case 132: break;
+ case 90:
{ return PyTokenTypes.GLOBAL_KEYWORD;
}
- case 131: break;
- case 84:
+ case 133: break;
+ case 85:
{ return PyTokenTypes.LAMBDA_KEYWORD;
}
- case 132: break;
+ case 134: break;
case 55:
{ return PyTokenTypes.XOREQ;
}
- case 133: break;
- case 64:
+ case 135: break;
+ case 65:
{ return PyTokenTypes.FOR_KEYWORD;
}
- case 134: break;
+ case 136: break;
case 33:
{ return PyTokenTypes.AT;
}
- case 135: break;
- case 67:
+ case 137: break;
+ case 68:
{ return PyTokenTypes.NOT_KEYWORD;
}
- case 136: break;
+ case 138: break;
case 16:
{ return PyTokenTypes.PLUS;
}
- case 137: break;
+ case 139: break;
case 42:
{ return PyTokenTypes.MINUSEQ;
}
- case 138: break;
+ case 140: break;
case 38:
{ yypushback(getSpaceLength(yytext())); yybegin(USUAL); return PyTokenTypes.DOCSTRING;
}
- case 139: break;
+ case 141: break;
case 61:
{ return PyTokenTypes.NE;
}
- case 140: break;
+ case 142: break;
case 34:
{ return PyTokenTypes.COMMA;
}
- case 141: break;
+ case 143: break;
case 47:
{ return PyTokenTypes.EQEQ;
}
- case 142: break;
+ case 144: break;
case 36:
{ return PyTokenTypes.TICK;
}
- case 143: break;
+ case 145: break;
case 49:
{ return PyTokenTypes.EXP;
}
- case 144: break;
- case 65:
+ case 146: break;
+ case 66:
{ return PyTokenTypes.TRIPLE_QUOTED_STRING;
}
- case 145: break;
- case 91:
+ case 147: break;
+ case 92:
{ return PyTokenTypes.CONTINUE_KEYWORD;
}
- case 146: break;
+ case 148: break;
case 60:
{ return PyTokenTypes.LTLT;
}
- case 147: break;
+ case 149: break;
case 58:
{ return PyTokenTypes.LE;
}
- case 148: break;
- case 66:
+ case 150: break;
+ case 67:
{ return PyTokenTypes.AND_KEYWORD;
}
- case 149: break;
+ case 151: break;
case 41:
{ return PyTokenTypes.OR_KEYWORD;
}
- case 150: break;
- case 78:
+ case 152: break;
+ case 79:
{ return PyTokenTypes.PASS_KEYWORD;
}
- case 151: break;
+ case 153: break;
+ case 62:
+ { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON;
+ }
+ case 154: break;
case 2:
{ return PyTokenTypes.END_OF_LINE_COMMENT;
}
- case 152: break;
- case 62:
+ case 155: break;
+ case 63:
{ if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING;
else yybegin(USUAL); return PyTokenTypes.TRIPLE_QUOTED_STRING;
}
- case 153: break;
+ case 156: break;
case 54:
{ return PyTokenTypes.OREQ;
}
- case 154: break;
+ case 157: break;
case 57:
{ return PyTokenTypes.GTGT;
}
- case 155: break;
+ case 158: break;
case 21:
{ return PyTokenTypes.AND;
}
- case 156: break;
+ case 159: break;
case 50:
{ return PyTokenTypes.DIVEQ;
}
- case 157: break;
- case 35:
- { yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON;
- }
- case 158: break;
- case 86:
+ case 160: break;
+ case 87:
{ return PyTokenTypes.RETURN_KEYWORD;
}
- case 159: break;
- case 88:
+ case 161: break;
+ case 89:
{ return PyTokenTypes.IMPORT_KEYWORD;
}
- case 160: break;
+ case 162: break;
case 56:
{ return PyTokenTypes.GE;
}
- case 161: break;
+ case 163: break;
case 46:
{ return PyTokenTypes.PLUSEQ;
}
- case 162: break;
- case 68:
+ case 164: break;
+ case 69:
{ return PyTokenTypes.DEF_KEYWORD;
}
- case 163: break;
+ case 165: break;
case 45:
{ return PyTokenTypes.IS_KEYWORD;
}
- case 164: break;
- case 72:
+ case 166: break;
+ case 73:
{ return PyTokenTypes.FLOORDIVEQ;
}
- case 165: break;
+ case 167: break;
case 39:
{ return PyTokenTypes.FLOAT_LITERAL;
}
- case 166: break;
+ case 168: break;
case 4:
{ return PyTokenTypes.LINE_BREAK;
}
- case 167: break;
+ case 169: break;
case 52:
{ return PyTokenTypes.PERCEQ;
}
- case 168: break;
- case 70:
+ case 170: break;
+ case 71:
{ return PyTokenTypes.TRY_KEYWORD;
}
- case 169: break;
+ case 171: break;
case 53:
{ return PyTokenTypes.ANDEQ;
}
- case 170: break;
+ case 172: break;
case 17:
{ return PyTokenTypes.EQ;
}
- case 171: break;
- case 75:
+ case 173: break;
+ case 76:
{ return PyTokenTypes.FROM_KEYWORD;
}
- case 172: break;
- case 71:
+ case 174: break;
+ case 72:
{ return PyTokenTypes.EXPEQ;
}
- case 173: break;
- case 77:
+ case 175: break;
+ case 78:
{ return PyTokenTypes.ELIF_KEYWORD;
}
- case 174: break;
+ case 176: break;
case 32:
{ return PyTokenTypes.RBRACE;
}
- case 175: break;
- case 81:
+ case 177: break;
+ case 82:
{ return PyTokenTypes.CLASS_KEYWORD;
}
- case 176: break;
+ case 178: break;
case 43:
{ return PyTokenTypes.IF_KEYWORD;
}
- case 177: break;
+ case 179: break;
case 6:
{ return PyTokenTypes.TAB;
}
- case 178: break;
+ case 180: break;
case 59:
{ return PyTokenTypes.NE_OLD;
}
- case 179: break;
+ case 181: break;
case 26:
{ return PyTokenTypes.TILDE;
}
- case 180: break;
+ case 182: break;
case 23:
{ return PyTokenTypes.XOR;
}
- case 181: break;
- case 69:
+ case 183: break;
+ case 70:
{ return PyTokenTypes.DEL_KEYWORD;
}
- case 182: break;
+ case 184: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
diff --git a/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java b/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java
index 48b69698918b..0bd1b130c047 100644
--- a/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java
+++ b/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java
@@ -17,7 +17,7 @@ import javax.swing.*;
* User : catherine
*/
public class PythonTestConfigurationType implements ConfigurationType {
- public static final String ID = "PythonTestConfigurationType";
+ private String myId = "tests";
public final PythonDocTestConfigurationFactory PY_DOCTEST_FACTORY = new PythonDocTestConfigurationFactory(this);
public final PythonUnitTestConfigurationFactory PY_UNITTEST_FACTORY = new PythonUnitTestConfigurationFactory(this);
@@ -37,6 +37,13 @@ public class PythonTestConfigurationType implements ConfigurationType {
super(configurationType);
}
+ @NotNull
+ public ConfigurationType getType() {
+ ConfigurationType type = super.getType();
+ ((PythonTestConfigurationType)type).setId("PythonUnitTestConfigurationType");
+ return type;
+ }
+
public RunConfiguration createTemplateConfiguration(Project project) {
return new PythonUnitTestRunConfiguration(new RunConfigurationModule(project), this, "");
}
@@ -56,6 +63,13 @@ public class PythonTestConfigurationType implements ConfigurationType {
return new PythonDocTestRunConfiguration(new RunConfigurationModule(project), this, "");
}
+ @NotNull
+ public ConfigurationType getType() {
+ ConfigurationType type = super.getType();
+ ((PythonTestConfigurationType)type).setId("PythonDocTestRunConfigurationType");
+ return type;
+ }
+
@Override
public String getName() {
return PyBundle.message("runcfg.doctest.display_name");
@@ -71,6 +85,13 @@ public class PythonTestConfigurationType implements ConfigurationType {
return new PyTestRunConfiguration("", new RunConfigurationModule(project), this);
}
+ @NotNull
+ public ConfigurationType getType() {
+ ConfigurationType type = super.getType();
+ ((PythonTestConfigurationType)type).setId("py.test");
+ return type;
+ }
+
@Override
public String getName() {
return PyBundle.message("runcfg.pytest.display_name");
@@ -86,6 +107,13 @@ public class PythonTestConfigurationType implements ConfigurationType {
return new PythonNoseTestRunConfiguration(new RunConfigurationModule(project), this, "");
}
+ @NotNull
+ public ConfigurationType getType() {
+ ConfigurationType type = super.getType();
+ ((PythonTestConfigurationType)type).setId("PythonNoseTestRunConfigurationType");
+ return type;
+ }
+
@Override
public String getName() {
return PyBundle.message("runcfg.nosetests.display_name");
@@ -101,6 +129,13 @@ public class PythonTestConfigurationType implements ConfigurationType {
return new PythonAtTestRunConfiguration(new RunConfigurationModule(project), this, "");
}
+ @NotNull
+ public ConfigurationType getType() {
+ ConfigurationType type = super.getType();
+ ((PythonTestConfigurationType)type).setId("attests");
+ return type;
+ }
+
@Override
public String getName() {
return PyBundle.message("runcfg.attest.display_name");
@@ -125,7 +160,11 @@ public class PythonTestConfigurationType implements ConfigurationType {
@NotNull
@Override
public String getId() {
- return ID;
+ return myId;
+ }
+
+ public void setId(String id) {
+ myId = id;
}
public ConfigurationFactory[] getConfigurationFactories() {
diff --git a/python/src/com/jetbrains/python/testing/converters/PythonTestRunConfigurationsConverter.java b/python/src/com/jetbrains/python/testing/converters/PythonTestRunConfigurationsConverter.java
index 8bff60efad46..856541f9dbd1 100644
--- a/python/src/com/jetbrains/python/testing/converters/PythonTestRunConfigurationsConverter.java
+++ b/python/src/com/jetbrains/python/testing/converters/PythonTestRunConfigurationsConverter.java
@@ -36,7 +36,7 @@ public class PythonTestRunConfigurationsConverter extends ConversionProcessor"""
+ Gets a payment profile by user Account object and authorize.net
+ profileid of the payment profile.
+ """
+ def __init__(self, user, profileid):
+ CustomerRequest.__init__(self, user,
+ customerPaymentProfileId=profileid)
\ No newline at end of file
diff --git a/python/testData/inspections/MoveDocstring_after.py b/python/testData/inspections/MoveDocstring_after.py
new file mode 100644
index 000000000000..e262aaa10637
--- /dev/null
+++ b/python/testData/inspections/MoveDocstring_after.py
@@ -0,0 +1,10 @@
+class GetCustomerPaymentProfileRequest(CustomerRequest):
+ """
+ Gets a payment profile by user Account object and authorize.net
+ profileid of the payment profile.
+ """
+ _keys = CustomerRequest._keys + ["customerPaymentProfileId"]
+
+ def __init__(self, user, profileid):
+ CustomerRequest.__init__(self, user,
+ customerPaymentProfileId=profileid)
\ No newline at end of file
diff --git a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
index ec78c2966fb1..224bef34eadc 100644
--- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
+++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
@@ -287,6 +287,11 @@ public class PyQuickFixTest extends PyLightFixtureTestCase {
PyBundle.message("QFIX.remove.decorator"), true, true);
}
+ public void testMoveDocstring() { //PY-4398
+ doInspectionTest("MoveDocstring.py", PyStatementEffectInspection.class,
+ PyBundle.message("QFIX.statement.effect.move.docstring"), true, true);
+ }
+
public void testSetFunctionToLiteral() { //PY-3120
setLanguageLevel(LanguageLevel.PYTHON27);
doInspectionTest("SetFunctionToLiteral.py", PySetFunctionToLiteralInspection.class,
diff --git a/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java b/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java
index 3750478347f7..364974d486bb 100644
--- a/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java
+++ b/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java
@@ -1,5 +1,7 @@
package com.jetbrains.python;
+import com.jetbrains.django.lang.template.DjangoTemplateParserTest;
+import com.jetbrains.jinja2.Jinja2ParserTest;
import com.jetbrains.python.codeInsight.PyCompletionPatternsTest;
import com.jetbrains.python.inspections.*;
import com.jetbrains.python.refactoring.*;
@@ -81,7 +83,9 @@ public class PythonAllTestsSuite {
PyUnusedImportTest.class,
PyDeprecationTest.class,
PythonHighlightingLexerTest.class,
- PyOldStyleClassInspectionTest.class
+ PyOldStyleClassInspectionTest.class,
+ Jinja2ParserTest.class,
+ DjangoTemplateParserTest.class
};
public static TestSuite suite() {
diff --git a/python/testSrc/com/jetbrains/python/PythonHighlightingLexerTest.java b/python/testSrc/com/jetbrains/python/PythonHighlightingLexerTest.java
index 0eba6f5a7ed9..a0cfe91588f3 100644
--- a/python/testSrc/com/jetbrains/python/PythonHighlightingLexerTest.java
+++ b/python/testSrc/com/jetbrains/python/PythonHighlightingLexerTest.java
@@ -145,6 +145,16 @@ public class PythonHighlightingLexerTest extends PyLexerTestCase {
"Py:SINGLE_QUOTED_STRING");
}
+ public void testNotDocstring() { // PY-4481
+ doTest(LanguageLevel.PYTHON27, "d = {\n" +
+ " 'abc': 'def',\n" +
+ " 'ghi': 'jkl'\n" +
+ " }",
+ "Py:IDENTIFIER", "Py:SPACE", "Py:EQ", "Py:SPACE", "Py:LBRACE", "Py:LINE_BREAK", "Py:SPACE", "Py:SINGLE_QUOTED_STRING",
+ "Py:COLON", "Py:SPACE", "Py:SINGLE_QUOTED_STRING", "Py:COMMA", "Py:LINE_BREAK", "Py:SPACE", "Py:SINGLE_QUOTED_STRING",
+ "Py:COLON", "Py:SPACE", "Py:SINGLE_QUOTED_STRING", "Py:LINE_BREAK", "Py:SPACE", "Py:RBRACE");
+ }
+
private static void doTest(LanguageLevel languageLevel, String text, String... expectedTokens) {
doLexerTest(text, new PythonHighlightingLexer(languageLevel), expectedTokens);
}