optimize imports inserts blank lines between groups also when we don't have any missorted imports (PY-8355)

This commit is contained in:
Dmitry Jemerov
2013-11-04 18:55:32 +01:00
parent 4ca7cb7e98
commit dd5841d56d
4 changed files with 37 additions and 3 deletions
@@ -107,11 +107,19 @@ public class PyImportOptimizer implements ImportOptimizer {
prioritize(importStatement, toImport);
}
}
if (myMissorted) {
if (myMissorted || needBlankLinesBetweenGroups()) {
applyResults();
}
}
private boolean needBlankLinesBetweenGroups() {
int nonEmptyGroups = 0;
if (myBuiltinImports.size() > 0) nonEmptyGroups++;
if (myThirdPartyImports.size() > 0) nonEmptyGroups++;
if (myProjectImports.size() > 0) nonEmptyGroups++;
return nonEmptyGroups > 1;
}
private void prioritize(PyImportStatementBase importStatement, @Nullable PsiElement toImport) {
if (toImport != null && !(toImport instanceof PsiFileSystemItem)) {
toImport = toImport.getContainingFile();
@@ -143,7 +151,10 @@ public class PyImportOptimizer implements ImportOptimizer {
addImports(myThirdPartyImports);
addImports(myProjectImports);
PsiElement lastElement = myImportBlock.get(myImportBlock.size()-1);
myFile.deleteChildRange(findFirstNonFutureImport(), lastElement);
PyImportStatementBase firstNonFutureImport = findFirstNonFutureImport();
if (firstNonFutureImport != null) {
myFile.deleteChildRange(firstNonFutureImport, lastElement);
}
for (PyImportStatementBase anImport : myBuiltinImports) {
anImport.putCopyableUserData(PyBlock.IMPORT_GROUP_BEGIN, null);
}
@@ -155,7 +166,7 @@ public class PyImportOptimizer implements ImportOptimizer {
return importStatement;
}
}
return myImportBlock.get(0);
return null;
}
private static void markGroupBegin(List<PyImportStatementBase> imports) {
@@ -0,0 +1,10 @@
from __future__ import with_statement
import sys
import datetime
import foo
from bar import *
sys.path
datetime.datetime
@@ -0,0 +1,9 @@
from __future__ import with_statement
import sys
import datetime
import foo
from bar import *
sys.path
datetime.datetime
@@ -63,6 +63,10 @@ public class PyOptimizeImportsTest extends PyTestCase {
doTest();
}
public void testInsertBlankLines() { // PY-8355
doTest();
}
private void doTest() {
myFixture.configureByFile("optimizeImports/" + getTestName(true) + ".py");
OptimizeImportsAction.actionPerformedImpl(DataManager.getInstance().getDataContext(myFixture.getEditor().getContentComponent()));