added inspection for extra blank lines

GitOrigin-RevId: c47a72a5a323ee2f1d274e0b46ef388c5bea5b6d
This commit is contained in:
marcelhillesheim
2021-10-16 01:46:41 +02:00
committed by intellij-monorepo-bot
parent 90369b34dc
commit ea1946cbea
5 changed files with 84 additions and 3 deletions

View File

@@ -0,0 +1,60 @@
package ru.adelf.idea.dotenv.inspections;
import com.intellij.codeInspection.InspectionManager;
import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import ru.adelf.idea.dotenv.psi.DotEnvFile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtraBlankLineInspection extends LocalInspectionTool {
// Change the display name within the plugin.xml
// This needs to be here as otherwise the tests will throw errors.
@NotNull
@Override
public String getDisplayName() {
return "Extra blank line";
}
@Override
public boolean runForWholeFile() {
return true;
}
@Nullable
@Override
public ProblemDescriptor[] checkFile(@NotNull PsiFile file, @NotNull InspectionManager manager, boolean isOnTheFly) {
if (!(file instanceof DotEnvFile)) {
return null;
}
return analyzeFile(file, manager, isOnTheFly).getResultsArray();
}
@NotNull
private ProblemsHolder analyzeFile(@NotNull PsiFile file, @NotNull InspectionManager manager, boolean isOnTheFly) {
ProblemsHolder problemsHolder = new ProblemsHolder(manager, file, isOnTheFly);
PsiTreeUtil.findChildrenOfType(file, PsiWhiteSpaceImpl.class).forEach(whiteSpace -> {
Pattern pattern = Pattern.compile("\r\n|\r|\n");
Matcher matcher = pattern.matcher(whiteSpace.getText());
int count = 0;
while (matcher.find())
count++;
if (count > 2) {
problemsHolder.registerProblem(whiteSpace, "Only one extra line allowed between properties");
}
});
return problemsHolder;
}
}

View File

@@ -86,7 +86,6 @@
<lang.parserDefinition language="DotEnv" implementationClass="ru.adelf.idea.dotenv.DotEnvParserDefinition"/>
<lang.commenter language="DotEnv" implementationClass="ru.adelf.idea.dotenv.extension.DotEnvCommenter"/>
<!-- displayName defined within class otherwise test will throw errors -->
<localInspection language="DotEnv"
groupName="DotEnv"
shortName="DotEnvDuplicateKeyInspection"
@@ -95,7 +94,6 @@
level="WARNING"
implementationClass="ru.adelf.idea.dotenv.inspections.DuplicateKeyInspection"/>
<!-- displayName defined within class otherwise test will throw errors -->
<localInspection language="DotEnv"
groupName="DotEnv"
shortName="DotEnvSpaceInsideNonQuotedInspection"
@@ -104,6 +102,14 @@
level="WARNING"
implementationClass="ru.adelf.idea.dotenv.inspections.SpaceInsideNonQuotedInspection"/>
<localInspection language="DotEnv"
groupName="DotEnv"
shortName="DotEnvExtraBlankLineInspection"
displayName="Extra blank line"
enabledByDefault="true"
level="WARNING"
implementationClass="ru.adelf.idea.dotenv.inspections.ExtraBlankLineInspection"/>
<lang.syntaxHighlighterFactory language="DotEnv"
implementationClass="ru.adelf.idea.dotenv.DotEnvSyntaxHighlighterFactory"/>

View File

@@ -0,0 +1,5 @@
<html>
<body>
Reports extra blank lines in .env files.
</body>
</html>

View File

@@ -3,6 +3,7 @@ package ru.adelf.idea.dotenv.tests.dotenv;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInspection.InspectionProfileEntry;
import ru.adelf.idea.dotenv.inspections.DuplicateKeyInspection;
import ru.adelf.idea.dotenv.inspections.ExtraBlankLineInspection;
import ru.adelf.idea.dotenv.inspections.SpaceInsideNonQuotedInspection;
import ru.adelf.idea.dotenv.tests.DotEnvLightCodeInsightFixtureTestCase;
@@ -31,6 +32,10 @@ public class InspectionsTest extends DotEnvLightCodeInsightFixtureTestCase {
doInspectionTest(new SpaceInsideNonQuotedInspection(), Collections.singletonList("spaces without quotes"));
}
public void testExtraBlankLine() {
doInspectionTest(new ExtraBlankLineInspection(), Collections.singletonList("\n\n\n"));
}
private void doInspectionTest(InspectionProfileEntry entry, List<String> expectedHighlightedText) {
myFixture.enableInspections(entry);
@@ -39,6 +44,6 @@ public class InspectionsTest extends DotEnvLightCodeInsightFixtureTestCase {
highlightInfoList.forEach( highlightInfo -> actualHighlightedText.add(highlightInfo.getText()));
assertEquals(actualHighlightedText, expectedHighlightedText);
assertEquals(expectedHighlightedText, actualHighlightedText);
}
}

View File

@@ -2,3 +2,8 @@ DUPLICATE_KEY=test
DUPLICATE_KEY=test2
SPACE_INSIDE_NON_QUOTED=spaces without quotes
# extra blank lines test START
# extra blank lines test END