From 279a136c148835d938a18e271ee3264d4b9e4b87 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 13 Dec 2012 20:04:11 +0100 Subject: [PATCH] change option "between top-level classes and functions" to "around ...", ensure that we put two lines between import and class (PY-7743) --- .../com/jetbrains/python/formatter/PyCodeStyleSettings.java | 2 +- .../formatter/PyLanguageCodeStyleSettingsProvider.java | 2 +- .../python/formatter/PythonFormattingModelBuilder.java | 4 +++- python/testData/copyPaste/Indent2.after.py | 1 + python/testData/formatter/alignForMethodArguments_after.py | 1 + python/testData/formatter/beforeTopLevelClass.py | 5 +++++ python/testData/formatter/beforeTopLevelClass_after.py | 6 ++++++ python/testData/formatter/blankLineAfterImports.py | 2 +- python/testData/formatter/blankLineAfterImports_after.py | 2 +- python/testData/formatter/comment_after.py | 1 + .../testData/formatter/noAlignForMethodArguments_after.py | 1 + python/testData/formatter/spaceInMethodDeclaration_after.py | 1 + python/testData/inspections/AddFieldFromInstance_after.py | 1 + python/testData/inspections/AddFunctionToModule_after.py | 1 + python/testData/inspections/AddMethodFromInstance_after.py | 1 + .../intentions/afterConvertFormatOperatorToMethodMulti.py | 2 +- python/testData/intentions/afterConvertLambdaToFunction.py | 1 - .../testData/intentions/afterUnicodeStringConcatToFormat.py | 1 + .../refactoring/changeSignature/addDefaultParam.after.py | 1 + .../refactoring/changeSignature/addDefaultParam1.after.py | 1 + .../refactoring/changeSignature/addPositionalParam.after.py | 1 + .../refactoring/changeSignature/changeFunctionName.after.py | 1 + .../refactoring/changeSignature/fixDocstringRemove.after.py | 1 + .../refactoring/changeSignature/keywordOnlyParams.after.py | 1 + .../refactoring/changeSignature/keywordParam.after.py | 1 + python/testData/refactoring/changeSignature/kwArgs.after.py | 1 + .../changeSignature/removeDefaultFromParam.after.py | 1 + .../changeSignature/removeFirstPositionalParam.after.py | 1 + .../changeSignature/removePositionalParam.after.py | 1 + .../changeSignature/switchPositionalParam.after.py | 1 + .../refactoring/changeSignature/updateDocstring.after.py | 1 + .../refactoring/extractmethod/BinaryExpression.after.py | 1 + .../extractmethod/GlobalToplevelAssignment.after.py | 2 ++ .../refactoring/extractmethod/GlobalVarAssignment.after.py | 1 + .../refactoring/extractmethod/StatementReturn.after.py | 1 + .../extractsuperclass/multifile/target.append.py | 1 + .../refactoring/extractsuperclass/withImport.after.py | 1 + .../introduceConstant/insertAfterDocstring.after.py | 1 + .../introduceConstant/insertAfterImport.after.py | 1 + .../testData/refactoring/introduceConstant/py4414.after.py | 1 + python/testData/refactoring/move/baseClass/after/src/a.py | 1 + python/testData/refactoring/move/class/after/src/b.py | 1 + python/testData/refactoring/move/function/after/src/b.py | 1 + .../refactoring/move/functionToUsage/after/src/b.py | 2 ++ python/testData/refactoring/move/importAs/after/src/b.py | 1 + python/testData/refactoring/move/importAs/after/src/c.py | 1 + .../move/importFirstWithSlash/after/src/file2.py | 1 + .../refactoring/move/importSlash/after/src/file2.py | 1 + .../testData/refactoring/move/innerImports/after/src/b.py | 1 + python/testData/refactoring/move/newModule/after/src/b.py | 1 + .../testData/refactoring/move/packageImport/after/src/b.py | 1 + .../testData/refactoring/move/packageImport/after/src/c.py | 1 + .../refactoring/move/qualifiedImport/after/src/c.py | 1 + .../refactoring/move/starImportUsage/after/src/c.py | 1 + .../testData/refactoring/move/subModuleUsage/after/src/b.py | 1 + .../refactoring/move/usageFromFunction/after/src/b.py | 1 + python/testSrc/com/jetbrains/python/PyFormatterTest.java | 6 +++++- python/testSrc/com/jetbrains/python/PyIndentTest.java | 2 +- .../testSrc/com/jetbrains/python/PythonAllTestsSuite.java | 4 +++- 59 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 python/testData/formatter/beforeTopLevelClass.py create mode 100644 python/testData/formatter/beforeTopLevelClass_after.py diff --git a/python/src/com/jetbrains/python/formatter/PyCodeStyleSettings.java b/python/src/com/jetbrains/python/formatter/PyCodeStyleSettings.java index f7232ade3245..c90398ced375 100644 --- a/python/src/com/jetbrains/python/formatter/PyCodeStyleSettings.java +++ b/python/src/com/jetbrains/python/formatter/PyCodeStyleSettings.java @@ -14,7 +14,7 @@ public class PyCodeStyleSettings extends CustomCodeStyleSettings { public boolean SPACE_AROUND_EQ_IN_NAMED_PARAMETER = false; public boolean SPACE_AROUND_EQ_IN_KEYWORD_ARGUMENT = false; - public int BLANK_LINES_BETWEEN_TOP_LEVEL_CLASSES_FUNCTIONS = 2; + public int BLANK_LINES_AROUND_TOP_LEVEL_CLASSES_FUNCTIONS = 2; public PyCodeStyleSettings(CodeStyleSettings container) { super("Python", container); diff --git a/python/src/com/jetbrains/python/formatter/PyLanguageCodeStyleSettingsProvider.java b/python/src/com/jetbrains/python/formatter/PyLanguageCodeStyleSettingsProvider.java index 8899cfc59ab4..1850d7ad6234 100644 --- a/python/src/com/jetbrains/python/formatter/PyLanguageCodeStyleSettingsProvider.java +++ b/python/src/com/jetbrains/python/formatter/PyLanguageCodeStyleSettingsProvider.java @@ -65,7 +65,7 @@ public class PyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettin "BLANK_LINES_AFTER_IMPORTS", "KEEP_BLANK_LINES_IN_DECLARATIONS", "KEEP_BLANK_LINES_IN_CODE"); - consumer.showCustomOption(PyCodeStyleSettings.class, "BLANK_LINES_BETWEEN_TOP_LEVEL_CLASSES_FUNCTIONS", "Between top-level classes and functions:", + consumer.showCustomOption(PyCodeStyleSettings.class, "BLANK_LINES_AROUND_TOP_LEVEL_CLASSES_FUNCTIONS", "Around top-level classes and functions:", BLANK_LINES); } else if (settingsType == SettingsType.WRAPPING_AND_BRACES_SETTINGS) { diff --git a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java index 38f6d0078142..74a1509bf648 100644 --- a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java +++ b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java @@ -57,8 +57,10 @@ public class PythonFormattingModelBuilder implements FormattingModelBuilderEx, C final CommonCodeStyleSettings commonSettings = settings.getCommonSettings(PythonLanguage.getInstance()); return new SpacingBuilder(settings) + .betweenInside(STATEMENT_OR_DECLARATION, CLASS_OR_FUNCTION, file).blankLines(pySettings.BLANK_LINES_AROUND_TOP_LEVEL_CLASSES_FUNCTIONS) + .betweenInside(CLASS_OR_FUNCTION, STATEMENT_OR_DECLARATION, file).blankLines(pySettings.BLANK_LINES_AROUND_TOP_LEVEL_CLASSES_FUNCTIONS) .between(IMPORT_STATEMENTS, TokenSet.andNot(STATEMENT_OR_DECLARATION, IMPORT_STATEMENTS)).blankLines(commonSettings.BLANK_LINES_AFTER_IMPORTS) - .betweenInside(CLASS_OR_FUNCTION, CLASS_OR_FUNCTION, file).blankLines(pySettings.BLANK_LINES_BETWEEN_TOP_LEVEL_CLASSES_FUNCTIONS) + .betweenInside(CLASS_OR_FUNCTION, CLASS_OR_FUNCTION, file).blankLines(pySettings.BLANK_LINES_AROUND_TOP_LEVEL_CLASSES_FUNCTIONS) .between(CLASS_DECLARATION, STATEMENT_OR_DECLARATION).blankLines(commonSettings.BLANK_LINES_AROUND_CLASS) .between(STATEMENT_OR_DECLARATION, CLASS_DECLARATION).blankLines(commonSettings.BLANK_LINES_AROUND_CLASS) .between(FUNCTION_DECLARATION, STATEMENT_OR_DECLARATION).blankLines(commonSettings.BLANK_LINES_AROUND_METHOD) diff --git a/python/testData/copyPaste/Indent2.after.py b/python/testData/copyPaste/Indent2.after.py index 0605eb0cbe4c..3aacb75e0d46 100644 --- a/python/testData/copyPaste/Indent2.after.py +++ b/python/testData/copyPaste/Indent2.after.py @@ -2,4 +2,5 @@ def bar(): x = 1 y = 2 + var = "string" \ No newline at end of file diff --git a/python/testData/formatter/alignForMethodArguments_after.py b/python/testData/formatter/alignForMethodArguments_after.py index 0257a4037b34..5587274c47ed 100644 --- a/python/testData/formatter/alignForMethodArguments_after.py +++ b/python/testData/formatter/alignForMethodArguments_after.py @@ -1,4 +1,5 @@ def long_method_name(bar, baz): pass + long_method_name("long string one", "long string two") diff --git a/python/testData/formatter/beforeTopLevelClass.py b/python/testData/formatter/beforeTopLevelClass.py new file mode 100644 index 000000000000..ba9cc6d3e8e7 --- /dev/null +++ b/python/testData/formatter/beforeTopLevelClass.py @@ -0,0 +1,5 @@ +from unittest import TestCase + +class MyTest(TestCase): + def test_pass(self): + self.assertEqual(1 + 1, 2) \ No newline at end of file diff --git a/python/testData/formatter/beforeTopLevelClass_after.py b/python/testData/formatter/beforeTopLevelClass_after.py new file mode 100644 index 000000000000..888df9e26d7b --- /dev/null +++ b/python/testData/formatter/beforeTopLevelClass_after.py @@ -0,0 +1,6 @@ +from unittest import TestCase + + +class MyTest(TestCase): + def test_pass(self): + self.assertEqual(1 + 1, 2) \ No newline at end of file diff --git a/python/testData/formatter/blankLineAfterImports.py b/python/testData/formatter/blankLineAfterImports.py index 21185c040324..ed75c21a7fba 100644 --- a/python/testData/formatter/blankLineAfterImports.py +++ b/python/testData/formatter/blankLineAfterImports.py @@ -1,3 +1,3 @@ import sys from os import * -def foo(): print sys.platform \ No newline at end of file +p = sys.platform \ No newline at end of file diff --git a/python/testData/formatter/blankLineAfterImports_after.py b/python/testData/formatter/blankLineAfterImports_after.py index aea90157f737..adb781c54819 100644 --- a/python/testData/formatter/blankLineAfterImports_after.py +++ b/python/testData/formatter/blankLineAfterImports_after.py @@ -1,4 +1,4 @@ import sys from os import * -def foo(): print sys.platform \ No newline at end of file +p = sys.platform \ No newline at end of file diff --git a/python/testData/formatter/comment_after.py b/python/testData/formatter/comment_after.py index 92330fbd0d6a..def63e49dbf5 100644 --- a/python/testData/formatter/comment_after.py +++ b/python/testData/formatter/comment_after.py @@ -3,4 +3,5 @@ def foo(a): # a is 5 print 'no' + foo(5) \ No newline at end of file diff --git a/python/testData/formatter/noAlignForMethodArguments_after.py b/python/testData/formatter/noAlignForMethodArguments_after.py index 206890bf3600..5682f4ca4f45 100644 --- a/python/testData/formatter/noAlignForMethodArguments_after.py +++ b/python/testData/formatter/noAlignForMethodArguments_after.py @@ -1,4 +1,5 @@ def long_method_name(bar, baz): pass + long_method_name("long string one", "long string two") diff --git a/python/testData/formatter/spaceInMethodDeclaration_after.py b/python/testData/formatter/spaceInMethodDeclaration_after.py index 209b9ab1a77c..1e146669b452 100644 --- a/python/testData/formatter/spaceInMethodDeclaration_after.py +++ b/python/testData/formatter/spaceInMethodDeclaration_after.py @@ -1,4 +1,5 @@ def foo (bar, baz): pass + foo(True, False) \ No newline at end of file diff --git a/python/testData/inspections/AddFieldFromInstance_after.py b/python/testData/inspections/AddFieldFromInstance_after.py index 944ee222ff3c..686290338cf5 100644 --- a/python/testData/inspections/AddFieldFromInstance_after.py +++ b/python/testData/inspections/AddFieldFromInstance_after.py @@ -3,5 +3,6 @@ class A: self.x = 1 self.y = None + a = A() a.y+1 diff --git a/python/testData/inspections/AddFunctionToModule_after.py b/python/testData/inspections/AddFunctionToModule_after.py index 12079fd1b12b..26756340a128 100644 --- a/python/testData/inspections/AddFunctionToModule_after.py +++ b/python/testData/inspections/AddFunctionToModule_after.py @@ -4,5 +4,6 @@ import AddFunctionToModule # ourselves AddFunctionToModule.frob(1) + def frob(param): return None \ No newline at end of file diff --git a/python/testData/inspections/AddMethodFromInstance_after.py b/python/testData/inspections/AddMethodFromInstance_after.py index 03325ef41edc..0cff4c0f061c 100644 --- a/python/testData/inspections/AddMethodFromInstance_after.py +++ b/python/testData/inspections/AddMethodFromInstance_after.py @@ -5,5 +5,6 @@ class A: def y(self): pass + a = A() a.y() diff --git a/python/testData/intentions/afterConvertFormatOperatorToMethodMulti.py b/python/testData/intentions/afterConvertFormatOperatorToMethodMulti.py index 42d76c88443e..82541f3977b4 100644 --- a/python/testData/intentions/afterConvertFormatOperatorToMethodMulti.py +++ b/python/testData/intentions/afterConvertFormatOperatorToMethodMulti.py @@ -9,5 +9,5 @@ a = "{n:d} bottles of {what:>s} on the {where:>s}"\ "{new_n:#d} {{that is, {percent:+3.2f}% less}} "\ "bottles of {what:>6s} on the {where:>s}"\ .format(n=n, where="wall", howmuch=u'one', how="'round\t", new_n=(n - 1), percent=100 * (1 - ((n - 1.0) / n)), - what="beer") + what="beer") print a diff --git a/python/testData/intentions/afterConvertLambdaToFunction.py b/python/testData/intentions/afterConvertLambdaToFunction.py index 22f6ec568f7a..0cd0da9b151f 100644 --- a/python/testData/intentions/afterConvertLambdaToFunction.py +++ b/python/testData/intentions/afterConvertLambdaToFunction.py @@ -1,3 +1,2 @@ def newlist(x, y): return (x + y) / y - diff --git a/python/testData/intentions/afterUnicodeStringConcatToFormat.py b/python/testData/intentions/afterUnicodeStringConcatToFormat.py index 4e4897ebc584..c534e888a97c 100644 --- a/python/testData/intentions/afterUnicodeStringConcatToFormat.py +++ b/python/testData/intentions/afterUnicodeStringConcatToFormat.py @@ -1,4 +1,5 @@ def foo(): return "foo" + u'a%sf' % foo() \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/addDefaultParam.after.py b/python/testData/refactoring/changeSignature/addDefaultParam.after.py index 71f80c788649..8e376538fd36 100644 --- a/python/testData/refactoring/changeSignature/addDefaultParam.after.py +++ b/python/testData/refactoring/changeSignature/addDefaultParam.after.py @@ -1,4 +1,5 @@ def bar(a, b, c=3): pass + bar(1, 2) \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/addDefaultParam1.after.py b/python/testData/refactoring/changeSignature/addDefaultParam1.after.py index 140f92a8662b..60e751258f65 100644 --- a/python/testData/refactoring/changeSignature/addDefaultParam1.after.py +++ b/python/testData/refactoring/changeSignature/addDefaultParam1.after.py @@ -1,6 +1,7 @@ def foo(a, d=1, b=None): pass + foo("a", b="b") foo("a") foo("a", b="b") diff --git a/python/testData/refactoring/changeSignature/addPositionalParam.after.py b/python/testData/refactoring/changeSignature/addPositionalParam.after.py index a798e6ccc311..2ba62b0e6350 100644 --- a/python/testData/refactoring/changeSignature/addPositionalParam.after.py +++ b/python/testData/refactoring/changeSignature/addPositionalParam.after.py @@ -1,4 +1,5 @@ def bar(a, b, c): pass + bar(1, 2, 3) \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/changeFunctionName.after.py b/python/testData/refactoring/changeSignature/changeFunctionName.after.py index 6fc29c83f6e2..d7ea7da247b0 100644 --- a/python/testData/refactoring/changeSignature/changeFunctionName.after.py +++ b/python/testData/refactoring/changeSignature/changeFunctionName.after.py @@ -1,4 +1,5 @@ def bar(): pass + bar() \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/fixDocstringRemove.after.py b/python/testData/refactoring/changeSignature/fixDocstringRemove.after.py index 8bf215579b02..534e98e0b4f3 100644 --- a/python/testData/refactoring/changeSignature/fixDocstringRemove.after.py +++ b/python/testData/refactoring/changeSignature/fixDocstringRemove.after.py @@ -4,4 +4,5 @@ def foo(a): """ pass + foo("a") diff --git a/python/testData/refactoring/changeSignature/keywordOnlyParams.after.py b/python/testData/refactoring/changeSignature/keywordOnlyParams.after.py index dfbfd38edd14..ae97cb75aa61 100644 --- a/python/testData/refactoring/changeSignature/keywordOnlyParams.after.py +++ b/python/testData/refactoring/changeSignature/keywordOnlyParams.after.py @@ -1,4 +1,5 @@ def foo(param, *, a): pass + foo(1, a=2) diff --git a/python/testData/refactoring/changeSignature/keywordParam.after.py b/python/testData/refactoring/changeSignature/keywordParam.after.py index a3713cdc2a20..5bae9d9af57a 100644 --- a/python/testData/refactoring/changeSignature/keywordParam.after.py +++ b/python/testData/refactoring/changeSignature/keywordParam.after.py @@ -1,4 +1,5 @@ def func(a, b): pass + func(a=1, b=2) diff --git a/python/testData/refactoring/changeSignature/kwArgs.after.py b/python/testData/refactoring/changeSignature/kwArgs.after.py index 2ee1e7847502..1d28b6df8455 100644 --- a/python/testData/refactoring/changeSignature/kwArgs.after.py +++ b/python/testData/refactoring/changeSignature/kwArgs.after.py @@ -1,4 +1,5 @@ def func(param, **kwargs): pass + func(param=1, param2=1) \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/removeDefaultFromParam.after.py b/python/testData/refactoring/changeSignature/removeDefaultFromParam.after.py index 3488b975669e..f7389c2b6b45 100644 --- a/python/testData/refactoring/changeSignature/removeDefaultFromParam.after.py +++ b/python/testData/refactoring/changeSignature/removeDefaultFromParam.after.py @@ -1,6 +1,7 @@ def bar(a, b): pass + bar(1, 3) bar(1, b=3) bar(1, 2) \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/removeFirstPositionalParam.after.py b/python/testData/refactoring/changeSignature/removeFirstPositionalParam.after.py index 2aac48c4b5f9..e74be4d1e34e 100644 --- a/python/testData/refactoring/changeSignature/removeFirstPositionalParam.after.py +++ b/python/testData/refactoring/changeSignature/removeFirstPositionalParam.after.py @@ -1,4 +1,5 @@ def bar(b): pass + bar(2) \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/removePositionalParam.after.py b/python/testData/refactoring/changeSignature/removePositionalParam.after.py index fddb017f21de..2e35d0147bae 100644 --- a/python/testData/refactoring/changeSignature/removePositionalParam.after.py +++ b/python/testData/refactoring/changeSignature/removePositionalParam.after.py @@ -1,4 +1,5 @@ def bar(a): pass + bar(1) \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/switchPositionalParam.after.py b/python/testData/refactoring/changeSignature/switchPositionalParam.after.py index e087f98fb12f..6a33e11eb89c 100644 --- a/python/testData/refactoring/changeSignature/switchPositionalParam.after.py +++ b/python/testData/refactoring/changeSignature/switchPositionalParam.after.py @@ -1,4 +1,5 @@ def bar(b, a): pass + bar(2, 1) \ No newline at end of file diff --git a/python/testData/refactoring/changeSignature/updateDocstring.after.py b/python/testData/refactoring/changeSignature/updateDocstring.after.py index b2c788597501..33f518f444fc 100644 --- a/python/testData/refactoring/changeSignature/updateDocstring.after.py +++ b/python/testData/refactoring/changeSignature/updateDocstring.after.py @@ -5,4 +5,5 @@ def foo(a, d1=1): """ pass + foo("a", d1="b") diff --git a/python/testData/refactoring/extractmethod/BinaryExpression.after.py b/python/testData/refactoring/extractmethod/BinaryExpression.after.py index 97e855544d46..f5fce2d032a0 100644 --- a/python/testData/refactoring/extractmethod/BinaryExpression.after.py +++ b/python/testData/refactoring/extractmethod/BinaryExpression.after.py @@ -1,4 +1,5 @@ def foo(): return bbb + aaa = foo() && ccc \ No newline at end of file diff --git a/python/testData/refactoring/extractmethod/GlobalToplevelAssignment.after.py b/python/testData/refactoring/extractmethod/GlobalToplevelAssignment.after.py index 55294f3fcf84..9a9bf021ec87 100644 --- a/python/testData/refactoring/extractmethod/GlobalToplevelAssignment.after.py +++ b/python/testData/refactoring/extractmethod/GlobalToplevelAssignment.after.py @@ -1,10 +1,12 @@ a = 2 b = 3 + def bar(): global a, c a = a + b c = a * 2 + bar() print(c) \ No newline at end of file diff --git a/python/testData/refactoring/extractmethod/GlobalVarAssignment.after.py b/python/testData/refactoring/extractmethod/GlobalVarAssignment.after.py index 46baf4631166..0ca17889e414 100644 --- a/python/testData/refactoring/extractmethod/GlobalVarAssignment.after.py +++ b/python/testData/refactoring/extractmethod/GlobalVarAssignment.after.py @@ -1,5 +1,6 @@ x = 0 + def bar(): global x x = 1 diff --git a/python/testData/refactoring/extractmethod/StatementReturn.after.py b/python/testData/refactoring/extractmethod/StatementReturn.after.py index 61694ca944de..15b0536202eb 100644 --- a/python/testData/refactoring/extractmethod/StatementReturn.after.py +++ b/python/testData/refactoring/extractmethod/StatementReturn.after.py @@ -4,6 +4,7 @@ def foo(): else: return 1 + return foo() diff --git a/python/testData/refactoring/extractsuperclass/multifile/target.append.py b/python/testData/refactoring/extractsuperclass/multifile/target.append.py index 42cefbc92f40..81722c98acac 100644 --- a/python/testData/refactoring/extractsuperclass/multifile/target.append.py +++ b/python/testData/refactoring/extractsuperclass/multifile/target.append.py @@ -1,6 +1,7 @@ # existing module A = 1 + class Suppa: def foo(self): print "bar" diff --git a/python/testData/refactoring/extractsuperclass/withImport.after.py b/python/testData/refactoring/extractsuperclass/withImport.after.py index f1244a5643f5..ccd508bbebd7 100644 --- a/python/testData/refactoring/extractsuperclass/withImport.after.py +++ b/python/testData/refactoring/extractsuperclass/withImport.after.py @@ -1,5 +1,6 @@ import os from refactoring.extractsuperclass import Suppa + class A(Suppa): pass diff --git a/python/testData/refactoring/introduceConstant/insertAfterDocstring.after.py b/python/testData/refactoring/introduceConstant/insertAfterDocstring.after.py index 145fb3e8667c..0b5c393c4b45 100644 --- a/python/testData/refactoring/introduceConstant/insertAfterDocstring.after.py +++ b/python/testData/refactoring/introduceConstant/insertAfterDocstring.after.py @@ -3,6 +3,7 @@ Module docstring. """ a = 'Hello, World!' + def f(): """Function docstring.""" print(a) \ No newline at end of file diff --git a/python/testData/refactoring/introduceConstant/insertAfterImport.after.py b/python/testData/refactoring/introduceConstant/insertAfterImport.after.py index ac5f934398b2..a2a3c8010285 100644 --- a/python/testData/refactoring/introduceConstant/insertAfterImport.after.py +++ b/python/testData/refactoring/introduceConstant/insertAfterImport.after.py @@ -3,5 +3,6 @@ import urllib2 a = 42 + def foo(): return a \ No newline at end of file diff --git a/python/testData/refactoring/introduceConstant/py4414.after.py b/python/testData/refactoring/introduceConstant/py4414.after.py index af3c27809ef4..b21bf9340461 100644 --- a/python/testData/refactoring/introduceConstant/py4414.after.py +++ b/python/testData/refactoring/introduceConstant/py4414.after.py @@ -1,4 +1,5 @@ a = 1 + def m(): a \ No newline at end of file diff --git a/python/testData/refactoring/move/baseClass/after/src/a.py b/python/testData/refactoring/move/baseClass/after/src/a.py index 60b7210c351e..e7d7109bfac8 100644 --- a/python/testData/refactoring/move/baseClass/after/src/a.py +++ b/python/testData/refactoring/move/baseClass/after/src/a.py @@ -1,5 +1,6 @@ from b import B + class C(B): def __init__(self): super(C, self).__init__() \ No newline at end of file diff --git a/python/testData/refactoring/move/class/after/src/b.py b/python/testData/refactoring/move/class/after/src/b.py index e95a5a5602e1..bc3da06947dc 100644 --- a/python/testData/refactoring/move/class/after/src/b.py +++ b/python/testData/refactoring/move/class/after/src/b.py @@ -1,6 +1,7 @@ import lib1 from lib1 import URLOpener + def f(x): return x diff --git a/python/testData/refactoring/move/function/after/src/b.py b/python/testData/refactoring/move/function/after/src/b.py index b1db798cbf36..f8b33d202ffb 100644 --- a/python/testData/refactoring/move/function/after/src/b.py +++ b/python/testData/refactoring/move/function/after/src/b.py @@ -1,5 +1,6 @@ from lib1 import urlopen + def g(): return None diff --git a/python/testData/refactoring/move/functionToUsage/after/src/b.py b/python/testData/refactoring/move/functionToUsage/after/src/b.py index 12de1a4525b4..bb51445d4608 100644 --- a/python/testData/refactoring/move/functionToUsage/after/src/b.py +++ b/python/testData/refactoring/move/functionToUsage/after/src/b.py @@ -1,7 +1,9 @@ import lib1 import lib2 + def f(): pass + f() \ No newline at end of file diff --git a/python/testData/refactoring/move/importAs/after/src/b.py b/python/testData/refactoring/move/importAs/after/src/b.py index 46fa1decc686..6aecb23c654c 100644 --- a/python/testData/refactoring/move/importAs/after/src/b.py +++ b/python/testData/refactoring/move/importAs/after/src/b.py @@ -1,4 +1,5 @@ import lib1 as iks + def f(x): return iks.I(x) \ No newline at end of file diff --git a/python/testData/refactoring/move/importAs/after/src/c.py b/python/testData/refactoring/move/importAs/after/src/c.py index aa04d211f3bd..15cf1381339c 100644 --- a/python/testData/refactoring/move/importAs/after/src/c.py +++ b/python/testData/refactoring/move/importAs/after/src/c.py @@ -1,4 +1,5 @@ from b import f as g + def main(): print(g(42)) \ No newline at end of file diff --git a/python/testData/refactoring/move/importFirstWithSlash/after/src/file2.py b/python/testData/refactoring/move/importFirstWithSlash/after/src/file2.py index a085a0253cb8..3bf746c0d967 100644 --- a/python/testData/refactoring/move/importFirstWithSlash/after/src/file2.py +++ b/python/testData/refactoring/move/importFirstWithSlash/after/src/file2.py @@ -1,4 +1,5 @@ __author__ = 'catherine' + def function_1(): pass \ No newline at end of file diff --git a/python/testData/refactoring/move/importSlash/after/src/file2.py b/python/testData/refactoring/move/importSlash/after/src/file2.py index 9c71db79c6fa..4997a87c9bce 100644 --- a/python/testData/refactoring/move/importSlash/after/src/file2.py +++ b/python/testData/refactoring/move/importSlash/after/src/file2.py @@ -1,4 +1,5 @@ __author__ = 'catherine' + def function_2(): pass \ No newline at end of file diff --git a/python/testData/refactoring/move/innerImports/after/src/b.py b/python/testData/refactoring/move/innerImports/after/src/b.py index 77eae2bf4490..0ee989fc538c 100644 --- a/python/testData/refactoring/move/innerImports/after/src/b.py +++ b/python/testData/refactoring/move/innerImports/after/src/b.py @@ -1,5 +1,6 @@ from lib1 import S, K + def f(x): from lib1 import I return S(K(I))(I)(42) \ No newline at end of file diff --git a/python/testData/refactoring/move/newModule/after/src/b.py b/python/testData/refactoring/move/newModule/after/src/b.py index 000c124d957c..aaf94453e78c 100644 --- a/python/testData/refactoring/move/newModule/after/src/b.py +++ b/python/testData/refactoring/move/newModule/after/src/b.py @@ -1,5 +1,6 @@ __author__ = 'user1' + def f(url): '''Return the representation available at the URL. diff --git a/python/testData/refactoring/move/packageImport/after/src/b.py b/python/testData/refactoring/move/packageImport/after/src/b.py index 5fe9d3b2fe7f..546605e327ff 100644 --- a/python/testData/refactoring/move/packageImport/after/src/b.py +++ b/python/testData/refactoring/move/packageImport/after/src/b.py @@ -1,4 +1,5 @@ import lib1.mod1 + def f(x): return lib1.mod1.k(x)(42) \ No newline at end of file diff --git a/python/testData/refactoring/move/packageImport/after/src/c.py b/python/testData/refactoring/move/packageImport/after/src/c.py index 6d9db1a306a4..92b796ea9b34 100644 --- a/python/testData/refactoring/move/packageImport/after/src/c.py +++ b/python/testData/refactoring/move/packageImport/after/src/c.py @@ -1,4 +1,5 @@ from b import f + def main(): print(f(-1)) diff --git a/python/testData/refactoring/move/qualifiedImport/after/src/c.py b/python/testData/refactoring/move/qualifiedImport/after/src/c.py index 77ebc63c3f34..ef848174169e 100644 --- a/python/testData/refactoring/move/qualifiedImport/after/src/c.py +++ b/python/testData/refactoring/move/qualifiedImport/after/src/c.py @@ -1,5 +1,6 @@ import a from b import f + def main(): print(f(42)) diff --git a/python/testData/refactoring/move/starImportUsage/after/src/c.py b/python/testData/refactoring/move/starImportUsage/after/src/c.py index dc252b088e48..b60e8927c749 100644 --- a/python/testData/refactoring/move/starImportUsage/after/src/c.py +++ b/python/testData/refactoring/move/starImportUsage/after/src/c.py @@ -1,4 +1,5 @@ from b import f + def g(): return f() \ No newline at end of file diff --git a/python/testData/refactoring/move/subModuleUsage/after/src/b.py b/python/testData/refactoring/move/subModuleUsage/after/src/b.py index c4ec704103dc..063d04ae52af 100644 --- a/python/testData/refactoring/move/subModuleUsage/after/src/b.py +++ b/python/testData/refactoring/move/subModuleUsage/after/src/b.py @@ -1,4 +1,5 @@ from p1 import m1 + def f(): m1.g() \ No newline at end of file diff --git a/python/testData/refactoring/move/usageFromFunction/after/src/b.py b/python/testData/refactoring/move/usageFromFunction/after/src/b.py index a257b2fe1e82..fdaef86db7fd 100644 --- a/python/testData/refactoring/move/usageFromFunction/after/src/b.py +++ b/python/testData/refactoring/move/usageFromFunction/after/src/b.py @@ -1,4 +1,5 @@ from a import f + def use_f(): f() \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyFormatterTest.java b/python/testSrc/com/jetbrains/python/PyFormatterTest.java index 180aa90a5fca..ede674abeee4 100644 --- a/python/testSrc/com/jetbrains/python/PyFormatterTest.java +++ b/python/testSrc/com/jetbrains/python/PyFormatterTest.java @@ -130,11 +130,11 @@ public class PyFormatterTest extends PyTestCase { } public void testNoAlignForMethodArguments() { // PY-3995 + settings().getCommonSettings(PythonLanguage.getInstance()).ALIGN_MULTILINE_PARAMETERS_IN_CALLS = false; doTest(); } public void testAlignForMethodArguments() { // PY-3995 - settings().ALIGN_MULTILINE_PARAMETERS_IN_CALLS = true; doTest(); } @@ -205,6 +205,10 @@ public class PyFormatterTest extends PyTestCase { doTest(); } + public void testBeforeTopLevelClass() { // PY-7743 + doTest(); + } + public void testPsiFormatting() { // IDEA-69724 String initial = "def method_name(\n" + diff --git a/python/testSrc/com/jetbrains/python/PyIndentTest.java b/python/testSrc/com/jetbrains/python/PyIndentTest.java index 6e5ef280655d..ad8c925953fa 100644 --- a/python/testSrc/com/jetbrains/python/PyIndentTest.java +++ b/python/testSrc/com/jetbrains/python/PyIndentTest.java @@ -200,7 +200,7 @@ public class PyIndentTest extends PyTestCase { "class C:\n" + " def new_method(self):\n" + " variable = self._stats.get('outer_key', 'inner_key',\n" + - " "); + " "); } public void testEnterInSet() { // PY-1947 diff --git a/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java b/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java index 802685465a28..e2c991b5057d 100644 --- a/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java +++ b/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java @@ -9,6 +9,7 @@ import com.jetbrains.jinja2.Jinja2ParserTest; import com.jetbrains.python.codeInsight.PyCompletionPatternsTest; import com.jetbrains.python.inspections.*; import com.jetbrains.python.refactoring.*; +import com.jetbrains.python.refactoring.changeSignature.PyChangeSignatureTest; import com.jetbrains.python.refactoring.classes.PyExtractSuperclassTest; import com.jetbrains.python.refactoring.classes.PyPullUpTest; import com.jetbrains.python.refactoring.classes.PyPushDownTest; @@ -101,7 +102,8 @@ public class PythonAllTestsSuite { Jinja2ParserTest.class, DjangoTemplateParserTest.class, PyJoinLinesTest.class, - PyStatementListTest.class + PyStatementListTest.class, + PyChangeSignatureTest.class }; public static TestSuite suite() {