Added inspection and quickfix for trailing whitespaces within PsiWhitespace elements

GitOrigin-RevId: 5a5e8d286ce3a26690fdb885aa649ab68d569690
This commit is contained in:
marcelhillesheim
2021-11-07 23:49:38 +01:00
committed by intellij-monorepo-bot
parent 123ce76579
commit d4662f96b4
4 changed files with 29 additions and 6 deletions

View File

@@ -6,6 +6,8 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.tree.ElementType;
import com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -14,6 +16,7 @@ import ru.adelf.idea.dotenv.DotEnvFactory;
import ru.adelf.idea.dotenv.psi.DotEnvFile;
import ru.adelf.idea.dotenv.psi.DotEnvTypes;
import ru.adelf.idea.dotenv.psi.DotEnvValue;
import ru.adelf.idea.dotenv.psi.impl.DotEnvValueImpl;
public class TrailingWhitespaceInspection extends LocalInspectionTool {
// Change the display name within the plugin.xml
@@ -47,6 +50,15 @@ public class TrailingWhitespaceInspection extends LocalInspectionTool {
);
}
});
PsiTreeUtil.findChildrenOfType(file, PsiWhiteSpaceImpl.class).forEach(whiteSpace -> {
if (whiteSpace.getText().matches("\\s*[ \\t]\\n\\s*")) {
problemsHolder.registerProblem(whiteSpace,
"Line has trailing whitespace.",
new TrailingWhitespaceInspection.RemoveTrailingWhitespaceQuickFix()
);
}
});
return problemsHolder;
}
@@ -63,10 +75,15 @@ public class TrailingWhitespaceInspection extends LocalInspectionTool {
try {
PsiElement psiElement = descriptor.getPsiElement();
PsiElement newPsiElement = DotEnvFactory.createFromText(project, DotEnvTypes.VALUE,
"DUMMMY_KEY="+psiElement.getText().stripTrailing());
psiElement.replace(newPsiElement);
if (psiElement instanceof DotEnvValueImpl) {
PsiElement newPsiElement = DotEnvFactory.createFromText(project, DotEnvTypes.VALUE,
"DUMMY_KEY=" + psiElement.getText().stripTrailing());
psiElement.replace(newPsiElement);
} else if (psiElement instanceof PsiWhiteSpaceImpl) {
PsiElement newPsiElement = DotEnvFactory.createFromText(project, ElementType.WHITE_SPACE,
"DUMMY_KEY='VALUE'" + psiElement.getText().replaceAll("[ \\t]*\\n", "\n"));
psiElement.replace(newPsiElement);
}
} catch (IncorrectOperationException e) {
Logger.getInstance(IncorrectDelimiterInspection.class).error(e);
}

View File

@@ -61,7 +61,7 @@ public class InspectionsTest extends DotEnvLightCodeInsightFixtureTestCase {
@Test
public void testTrailingWhitespaceInspection() {
doInspectionTest(new TrailingWhitespaceInspection(), Arrays.asList(" ", " "));
doInspectionTest(new TrailingWhitespaceInspection(), Arrays.asList(" ", " ", " \n", " \n\n"));
}
@Test

View File

@@ -13,7 +13,10 @@ INCORRECT-DELIMITER=test-test
*LEADING_CHARACTER=test
TRAILING_WHITESPACE_SPACE=space
TRAILING_WHITESPACE_TAB=tab
TRAILING_WHITESPACE_TAB=tab
TRAILING_WHITESPACE_QUOTE="quote"
TRAILING_WHITESPACE_MULTI_LINE="multi
line"
lower_case_KEY=test

View File

@@ -13,6 +13,9 @@ INCORRECT_DELIMITER=test-test
TRAILING_WHITESPACE_SPACE=space
TRAILING_WHITESPACE_TAB=tab
TRAILING_WHITESPACE_QUOTE="quote"
TRAILING_WHITESPACE_MULTI_LINE="multi
line"
LOWER_CASE_KEY=test