From f7c17d6a64b1f1c4830ea6af051c4402583ce836 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 14 Jun 2017 14:04:25 +0200 Subject: [PATCH] Naming convention inspections --- .../inspection/IllegalIdentifierInspection.kt | 37 +--- .../inspectionDescriptions/ClassName.html | 5 + .../ConstPropertyName.html | 5 + .../inspectionDescriptions/EnumEntryName.html | 5 + .../inspectionDescriptions/FunctionName.html | 5 + .../LocalVariableName.html | 5 + .../ObjectPropertyName.html | 5 + .../inspectionDescriptions/PackageName.html | 5 + .../PrivatePropertyName.html | 5 + .../inspectionDescriptions/PropertyName.html | 5 + idea/src/META-INF/plugin.xml | 73 ++++++++ .../NamingConventionInspections.kt | 175 ++++++++++++++++++ .../idea/quickfix/RenameIdentifierFix.kt | 62 +++++++ .../naming/class/inspectionData/expected.xml | 26 +++ .../class/inspectionData/inspections.test | 1 + .../testData/inspections/naming/class/test.kt | 13 ++ .../enumEntry/inspectionData/expected.xml | 16 ++ .../enumEntry/inspectionData/inspections.test | 1 + .../inspections/naming/enumEntry/test.kt | 13 ++ .../function/inspectionData/expected.xml | 16 ++ .../function/inspectionData/inspections.test | 1 + .../inspections/naming/function/test.kt | 5 + .../inspectionData/expected.xml | 9 + .../inspectionData/inspections.test | 1 + .../naming/privateProperty/test.kt | 32 ++++ .../property/inspectionData/expected.xml | 16 ++ .../property/inspectionData/inspections.test | 1 + .../inspections/naming/property/test.kt | 30 +++ .../codeInsight/InspectionTestGenerated.java | 30 +++ 29 files changed, 572 insertions(+), 31 deletions(-) create mode 100644 idea/resources/inspectionDescriptions/ClassName.html create mode 100644 idea/resources/inspectionDescriptions/ConstPropertyName.html create mode 100644 idea/resources/inspectionDescriptions/EnumEntryName.html create mode 100644 idea/resources/inspectionDescriptions/FunctionName.html create mode 100644 idea/resources/inspectionDescriptions/LocalVariableName.html create mode 100644 idea/resources/inspectionDescriptions/ObjectPropertyName.html create mode 100644 idea/resources/inspectionDescriptions/PackageName.html create mode 100644 idea/resources/inspectionDescriptions/PrivatePropertyName.html create mode 100644 idea/resources/inspectionDescriptions/PropertyName.html create mode 100644 idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt create mode 100644 idea/src/org/jetbrains/kotlin/idea/quickfix/RenameIdentifierFix.kt create mode 100644 idea/testData/inspections/naming/class/inspectionData/expected.xml create mode 100644 idea/testData/inspections/naming/class/inspectionData/inspections.test create mode 100644 idea/testData/inspections/naming/class/test.kt create mode 100644 idea/testData/inspections/naming/enumEntry/inspectionData/expected.xml create mode 100644 idea/testData/inspections/naming/enumEntry/inspectionData/inspections.test create mode 100644 idea/testData/inspections/naming/enumEntry/test.kt create mode 100644 idea/testData/inspections/naming/function/inspectionData/expected.xml create mode 100644 idea/testData/inspections/naming/function/inspectionData/inspections.test create mode 100644 idea/testData/inspections/naming/function/test.kt create mode 100644 idea/testData/inspections/naming/privateProperty/inspectionData/expected.xml create mode 100644 idea/testData/inspections/naming/privateProperty/inspectionData/inspections.test create mode 100644 idea/testData/inspections/naming/privateProperty/test.kt create mode 100644 idea/testData/inspections/naming/property/inspectionData/expected.xml create mode 100644 idea/testData/inspections/naming/property/inspectionData/inspections.test create mode 100644 idea/testData/inspections/naming/property/test.kt diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/IllegalIdentifierInspection.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/IllegalIdentifierInspection.kt index 2b1810d4790..03b120903f3 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/IllegalIdentifierInspection.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/IllegalIdentifierInspection.kt @@ -16,19 +16,18 @@ package org.jetbrains.kotlin.android.inspection -import com.intellij.codeInsight.FileModificationService -import com.intellij.codeInspection.* -import com.intellij.ide.DataManager +import com.intellij.codeInspection.LocalInspectionToolSession +import com.intellij.codeInspection.ProblemHighlightType +import com.intellij.codeInspection.ProblemsHolder import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.fileEditor.FileEditorManager -import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor -import com.intellij.refactoring.rename.RenameHandlerRegistry import org.jetbrains.kotlin.android.getAndroidFacetForFile import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection +import org.jetbrains.kotlin.idea.quickfix.RenameIdentifierFix import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtPsiUtil +import org.jetbrains.kotlin.psi.KtVisitorVoid class IllegalIdentifierInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor { @@ -71,28 +70,4 @@ class IllegalIdentifierInspection : AbstractKotlinInspection() { } } - class RenameIdentifierFix : LocalQuickFix { - override fun getName() = "Rename" - override fun getFamilyName() = name - - override fun startInWriteAction(): Boolean = false - - override fun applyFix(project: Project, descriptor: ProblemDescriptor) { - val element = descriptor.psiElement ?: return - val file = element.containingFile ?: return - if (!FileModificationService.getInstance().prepareFileForWrite(file)) return - val editorManager = FileEditorManager.getInstance(project) - val fileEditor = editorManager.getSelectedEditor(file.virtualFile) ?: return - val dataContext = DataManager.getInstance().getDataContext(fileEditor.component) - val renameHandler = RenameHandlerRegistry.getInstance().getRenameHandler(dataContext) - - val editor = editorManager.selectedTextEditor - if (editor != null) { - renameHandler?.invoke(project, editor, file, dataContext) - } - else { - renameHandler?.invoke(project, arrayOf(element.parent), dataContext) - } - } - } } \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/ClassName.html b/idea/resources/inspectionDescriptions/ClassName.html new file mode 100644 index 00000000000..9841c1a8fde --- /dev/null +++ b/idea/resources/inspectionDescriptions/ClassName.html @@ -0,0 +1,5 @@ + + +Reports class names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/ConstPropertyName.html b/idea/resources/inspectionDescriptions/ConstPropertyName.html new file mode 100644 index 00000000000..a8f928670d3 --- /dev/null +++ b/idea/resources/inspectionDescriptions/ConstPropertyName.html @@ -0,0 +1,5 @@ + + +Reports const property names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/EnumEntryName.html b/idea/resources/inspectionDescriptions/EnumEntryName.html new file mode 100644 index 00000000000..0510ca8765d --- /dev/null +++ b/idea/resources/inspectionDescriptions/EnumEntryName.html @@ -0,0 +1,5 @@ + + +Reports enum entry names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/FunctionName.html b/idea/resources/inspectionDescriptions/FunctionName.html new file mode 100644 index 00000000000..a1005280514 --- /dev/null +++ b/idea/resources/inspectionDescriptions/FunctionName.html @@ -0,0 +1,5 @@ + + +Reports function names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/LocalVariableName.html b/idea/resources/inspectionDescriptions/LocalVariableName.html new file mode 100644 index 00000000000..ce5760ee887 --- /dev/null +++ b/idea/resources/inspectionDescriptions/LocalVariableName.html @@ -0,0 +1,5 @@ + + +Reports local variable names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/ObjectPropertyName.html b/idea/resources/inspectionDescriptions/ObjectPropertyName.html new file mode 100644 index 00000000000..21db1f56673 --- /dev/null +++ b/idea/resources/inspectionDescriptions/ObjectPropertyName.html @@ -0,0 +1,5 @@ + + +Reports names of properties in objects and companion objects that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/PackageName.html b/idea/resources/inspectionDescriptions/PackageName.html new file mode 100644 index 00000000000..5dc69325fc4 --- /dev/null +++ b/idea/resources/inspectionDescriptions/PackageName.html @@ -0,0 +1,5 @@ + + +Reports package names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/PrivatePropertyName.html b/idea/resources/inspectionDescriptions/PrivatePropertyName.html new file mode 100644 index 00000000000..547afe6e78e --- /dev/null +++ b/idea/resources/inspectionDescriptions/PrivatePropertyName.html @@ -0,0 +1,5 @@ + + +Reports private property names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/resources/inspectionDescriptions/PropertyName.html b/idea/resources/inspectionDescriptions/PropertyName.html new file mode 100644 index 00000000000..abb09fa1c08 --- /dev/null +++ b/idea/resources/inspectionDescriptions/PropertyName.html @@ -0,0 +1,5 @@ + + +Reports property names that do not follow the recommended naming conventions. + + \ No newline at end of file diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index f3f4657e9c3..1d1f10961f0 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -2456,6 +2456,79 @@ language="kotlin" /> + + + + + + + + + + + + + + + + + + + diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt new file mode 100644 index 00000000000..c0fd252cccd --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt @@ -0,0 +1,175 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.inspections + +import com.intellij.codeInspection.LocalInspectionToolSession +import com.intellij.codeInspection.ProblemsHolder +import com.intellij.openapi.editor.event.DocumentAdapter +import com.intellij.openapi.editor.event.DocumentEvent +import com.intellij.openapi.ui.LabeledComponent +import com.intellij.psi.JavaPsiFacade +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiElementVisitor +import com.intellij.psi.PsiNameIdentifierOwner +import com.intellij.ui.EditorTextField +import com.siyeh.ig.psiutils.TestUtils +import org.intellij.lang.regexp.RegExpFileType +import org.jetbrains.kotlin.idea.quickfix.RenameIdentifierFix +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType +import java.awt.BorderLayout +import javax.swing.JPanel + +abstract class NamingConventionInspection(private val entityName: String, + defaultNamePattern: String) : AbstractKotlinInspection() { + protected var nameRegex: Regex = defaultNamePattern.toRegex() + var namePattern: String = defaultNamePattern + set(value) { + field = value + nameRegex = value.toRegex() + } + + protected fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder) { + val name = element.name + val nameIdentifier = element.nameIdentifier + if (name != null && nameIdentifier != null && !nameRegex.matches(name)) { + holder.registerProblem(element.nameIdentifier!!, + "$entityName name #ref doesn't match regex '$namePattern' #loc", + RenameIdentifierFix()) + } + } + + override fun createOptionsPanel() = NamingConventionOptionsPanel(this) +} + +class ClassNameInspection : NamingConventionInspection("Class", "[A-Z][A-Za-z\\d]*") { + override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { + return object : KtVisitorVoid() { + override fun visitClassOrObject(classOrObject: KtClassOrObject) { + verifyName(classOrObject, holder) + } + + override fun visitEnumEntry(enumEntry: KtEnumEntry) { + // do nothing + } + } + } +} + +class EnumEntryNameInspection : NamingConventionInspection("Enum entry", "[A-Z]([A-Za-z\\d]*|[A-Z_\\d]*)") { + override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { + return object : KtVisitorVoid() { + override fun visitEnumEntry(enumEntry: KtEnumEntry) { + verifyName(enumEntry, holder) + } + } + } +} + +class FunctionNameInspection : NamingConventionInspection("Function", "[a-z][A-Za-z\\d]*") { + override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { + return object : KtVisitorVoid() { + override fun visitNamedFunction(function: KtNamedFunction) { + if (TestUtils.isInTestSourceContent(function) && function.nameIdentifier?.text?.startsWith("`") == true) { + return + } + verifyName(function, holder) + } + } + } +} + +abstract class PropertyNameInspectionBase protected constructor(private val kind: PropertyKind, + entityName: String, + defaultNamePattern: String) + : NamingConventionInspection(entityName, defaultNamePattern) { + + protected enum class PropertyKind { NORMAL, PRIVATE, OBJECT, CONST, LOCAL } + + override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { + return object : KtVisitorVoid() { + override fun visitProperty(property: KtProperty) { + if (property.getKind() == kind) { + verifyName(property, holder) + } + } + } + } + + private fun KtProperty.getKind(): PropertyKind = when { + isLocal -> PropertyKind.LOCAL + + containingClassOrObject is KtObjectDeclaration -> PropertyKind.OBJECT + + hasModifier(KtTokens.CONST_KEYWORD) -> PropertyKind.CONST + + visibilityModifierType() == KtTokens.PRIVATE_KEYWORD -> PropertyKind.PRIVATE + + else -> PropertyKind.NORMAL + } +} + +class PropertyNameInspection : PropertyNameInspectionBase(PropertyKind.NORMAL, "Property", "[a-z][A-Za-z\\d]*") + +class ObjectPropertyNameInspection : PropertyNameInspectionBase(PropertyKind.OBJECT, "Object property", "[A-Za-z][_A-Za-z\\d]*") + +class PrivatePropertyNameInspection : PropertyNameInspectionBase(PropertyKind.PRIVATE, "Private property", "_?[a-z][A-Za-z\\d]*") + +class ConstPropertyNameInspection : PropertyNameInspectionBase(PropertyKind.CONST, "Const property", "[A-Z][_A-Z\\d]*") + +class LocalVariableNameInspection : PropertyNameInspectionBase(PropertyKind.LOCAL, "Local variable", "[a-z][A-Za-z\\d]*") + +class PackageNameInspection : NamingConventionInspection("Package", "[a-z][A-Za-z\\d\\.]*") { + override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor { + return object : KtVisitorVoid() { + override fun visitPackageDirective(directive: KtPackageDirective) { + val qualifiedName = directive.qualifiedName + if (qualifiedName.isNotEmpty() && !nameRegex.matches(qualifiedName)) { + holder.registerProblem(directive.packageNameExpression!!, + "Package name #ref doesn't match regex '$namePattern' #loc", + RenamePackageFix()) + } + } + } + } + + private class RenamePackageFix : RenameIdentifierFix() { + override fun getElementToRename(element: PsiElement): PsiElement? { + val packageDirective = element as? KtPackageDirective ?: return null + return JavaPsiFacade.getInstance(element.project).findPackage(packageDirective.qualifiedName) + } + } +} + +class NamingConventionOptionsPanel(owner: NamingConventionInspection) : JPanel() { + init { + layout = BorderLayout() + + val regexField = EditorTextField(owner.namePattern, null, RegExpFileType.INSTANCE).apply { + setOneLineMode(true) + } + regexField.document.addDocumentListener(object : DocumentAdapter() { + override fun documentChanged(e: DocumentEvent?) { + owner.namePattern = regexField.text + } + }) + val labeledComponent = LabeledComponent.create(regexField, "Pattern:", BorderLayout.WEST) + add(labeledComponent, BorderLayout.NORTH) + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameIdentifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameIdentifierFix.kt new file mode 100644 index 00000000000..fb6cff4adc7 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameIdentifierFix.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.quickfix + +import com.intellij.codeInsight.FileModificationService +import com.intellij.codeInspection.LocalQuickFix +import com.intellij.codeInspection.ProblemDescriptor +import com.intellij.ide.DataManager +import com.intellij.openapi.fileEditor.FileEditorManager +import com.intellij.openapi.project.Project +import com.intellij.psi.PsiElement +import com.intellij.refactoring.RefactoringFactory +import com.intellij.refactoring.rename.RenameHandlerRegistry + +open class RenameIdentifierFix : LocalQuickFix { + override fun getName() = "Rename" + override fun getFamilyName() = name + + override fun startInWriteAction(): Boolean = false + + override fun applyFix(project: Project, descriptor: ProblemDescriptor) { + val element = descriptor.psiElement ?: return + val file = element.containingFile ?: return + if (!FileModificationService.getInstance().prepareFileForWrite(file)) return + val editorManager = FileEditorManager.getInstance(project) + val fileEditor = editorManager.getSelectedEditor(file.virtualFile) ?: return renameWithoutEditor(element) + val dataContext = DataManager.getInstance().getDataContext(fileEditor.component) + val renameHandler = RenameHandlerRegistry.getInstance().getRenameHandler(dataContext) + + val editor = editorManager.selectedTextEditor + if (editor != null) { + renameHandler?.invoke(project, editor, file, dataContext) + } + else { + val elementToRename = getElementToRename(element) ?: return + renameHandler?.invoke(project, arrayOf(elementToRename), dataContext) + } + } + + protected open fun getElementToRename(element: PsiElement): PsiElement? = element.parent + + private fun renameWithoutEditor(element: PsiElement) { + val elementToRename = getElementToRename(element) + val factory = RefactoringFactory.getInstance(element.project) + val renameRefactoring = factory.createRename(elementToRename, null, true, true) + renameRefactoring.run() + } +} \ No newline at end of file diff --git a/idea/testData/inspections/naming/class/inspectionData/expected.xml b/idea/testData/inspections/naming/class/inspectionData/expected.xml new file mode 100644 index 00000000000..26b463bc8c8 --- /dev/null +++ b/idea/testData/inspections/naming/class/inspectionData/expected.xml @@ -0,0 +1,26 @@ + + + test.kt + 1 + light_idea_test_case + + Class naming convention + Class name <code>a</code> doesn't match regex '[A-Z][A-Za-z\d]*' #loc + + + test.kt + 3 + light_idea_test_case + + Class naming convention + Class name <code>b</code> doesn''t match regex '[A-Z][A-Za-z\d]*' #loc + + + test.kt + 5 + light_idea_test_case + + Class naming convention + Class name <code>FOO_BAR</code> doesn''t match regex '[A-Z][A-Za-z\d]*' #loc + + \ No newline at end of file diff --git a/idea/testData/inspections/naming/class/inspectionData/inspections.test b/idea/testData/inspections/naming/class/inspectionData/inspections.test new file mode 100644 index 00000000000..94cfee5b814 --- /dev/null +++ b/idea/testData/inspections/naming/class/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.ClassNameInspection \ No newline at end of file diff --git a/idea/testData/inspections/naming/class/test.kt b/idea/testData/inspections/naming/class/test.kt new file mode 100644 index 00000000000..bc540eca39a --- /dev/null +++ b/idea/testData/inspections/naming/class/test.kt @@ -0,0 +1,13 @@ +class a + +object b + +object FOO_BAR + +enum class Foo { + BAR_BAZ, + BAZ_BAR, + GoodName, + _Foo, + quuxDoo, +} diff --git a/idea/testData/inspections/naming/enumEntry/inspectionData/expected.xml b/idea/testData/inspections/naming/enumEntry/inspectionData/expected.xml new file mode 100644 index 00000000000..2fb137e8437 --- /dev/null +++ b/idea/testData/inspections/naming/enumEntry/inspectionData/expected.xml @@ -0,0 +1,16 @@ + + + test.kt + 11 + light_idea_test_case + + Enum entry name <code>_Foo</code> doesn't match regex '[A-Z]([A-Za-z\d]*|[A-Z_\d]*)' #loc + + + test.kt + 12 + light_idea_test_case + + Enum entry name <code>quuxDoo</code> doesn't match regex '[A-Z]([A-Za-z\d]*|[A-Z_\d]*)' #loc + + \ No newline at end of file diff --git a/idea/testData/inspections/naming/enumEntry/inspectionData/inspections.test b/idea/testData/inspections/naming/enumEntry/inspectionData/inspections.test new file mode 100644 index 00000000000..80f8c87c6fa --- /dev/null +++ b/idea/testData/inspections/naming/enumEntry/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.EnumEntryNameInspection \ No newline at end of file diff --git a/idea/testData/inspections/naming/enumEntry/test.kt b/idea/testData/inspections/naming/enumEntry/test.kt new file mode 100644 index 00000000000..bc540eca39a --- /dev/null +++ b/idea/testData/inspections/naming/enumEntry/test.kt @@ -0,0 +1,13 @@ +class a + +object b + +object FOO_BAR + +enum class Foo { + BAR_BAZ, + BAZ_BAR, + GoodName, + _Foo, + quuxDoo, +} diff --git a/idea/testData/inspections/naming/function/inspectionData/expected.xml b/idea/testData/inspections/naming/function/inspectionData/expected.xml new file mode 100644 index 00000000000..0695fa7edd6 --- /dev/null +++ b/idea/testData/inspections/naming/function/inspectionData/expected.xml @@ -0,0 +1,16 @@ + + + test.kt + 1 + light_idea_test_case + + Function name <code>Foo</code> doesn't match regex '[a-z][A-Za-z\d]*' #loc + + + test.kt + 3 + light_idea_test_case + + Function name <code>FOO_BAR</code> doesn't match regex '[a-z][A-Za-z\d]*' #loc + + diff --git a/idea/testData/inspections/naming/function/inspectionData/inspections.test b/idea/testData/inspections/naming/function/inspectionData/inspections.test new file mode 100644 index 00000000000..7b76babb6b8 --- /dev/null +++ b/idea/testData/inspections/naming/function/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.FunctionNameInspection \ No newline at end of file diff --git a/idea/testData/inspections/naming/function/test.kt b/idea/testData/inspections/naming/function/test.kt new file mode 100644 index 00000000000..484cec2b948 --- /dev/null +++ b/idea/testData/inspections/naming/function/test.kt @@ -0,0 +1,5 @@ +fun Foo() {} + +fun FOO_BAR() {} + +fun xyzzy() {} diff --git a/idea/testData/inspections/naming/privateProperty/inspectionData/expected.xml b/idea/testData/inspections/naming/privateProperty/inspectionData/expected.xml new file mode 100644 index 00000000000..bc78fa6dafc --- /dev/null +++ b/idea/testData/inspections/naming/privateProperty/inspectionData/expected.xml @@ -0,0 +1,9 @@ + + + test.kt + 23 + light_idea_test_case + + Private property name <code>FOO_BAR</code> doesn't match regex '[a-z][A-Za-z\d]*' #loc + + diff --git a/idea/testData/inspections/naming/privateProperty/inspectionData/inspections.test b/idea/testData/inspections/naming/privateProperty/inspectionData/inspections.test new file mode 100644 index 00000000000..8b24b76af44 --- /dev/null +++ b/idea/testData/inspections/naming/privateProperty/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.PrivatePropertyNameInspection \ No newline at end of file diff --git a/idea/testData/inspections/naming/privateProperty/test.kt b/idea/testData/inspections/naming/privateProperty/test.kt new file mode 100644 index 00000000000..c489e0c75b9 --- /dev/null +++ b/idea/testData/inspections/naming/privateProperty/test.kt @@ -0,0 +1,32 @@ +val Foo: String = "" + +var FOO_BAR: Int = 0 + +const val THREE = 3 + +val xyzzy = 1 + +fun foo() { + val XYZZY = 1 + val BAR_BAZ = 2 +} + +object Foo { + val Foo: String = "" + + var FOO_BAR: Int = 0 +} + +class D { + private val _foo: String + + private val FOO_BAR: String + + companion object { + val Foo: String = "" + + var FOO_BAR: Int = 0 + + private val FOO_BAZ = 1 + } +} \ No newline at end of file diff --git a/idea/testData/inspections/naming/property/inspectionData/expected.xml b/idea/testData/inspections/naming/property/inspectionData/expected.xml new file mode 100644 index 00000000000..208f68275dd --- /dev/null +++ b/idea/testData/inspections/naming/property/inspectionData/expected.xml @@ -0,0 +1,16 @@ + + + test.kt + 1 + light_idea_test_case + + Property name <code>Foo</code> doesn't match regex '[a-z][A-Za-z\d]*' #loc + + + test.kt + 3 + light_idea_test_case + + Property name <code>FOO_BAR</code> doesn't match regex '[a-z][A-Za-z\d]*' #loc + + diff --git a/idea/testData/inspections/naming/property/inspectionData/inspections.test b/idea/testData/inspections/naming/property/inspectionData/inspections.test new file mode 100644 index 00000000000..00944940c5d --- /dev/null +++ b/idea/testData/inspections/naming/property/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.PropertyNameInspection \ No newline at end of file diff --git a/idea/testData/inspections/naming/property/test.kt b/idea/testData/inspections/naming/property/test.kt new file mode 100644 index 00000000000..c7cd37f9438 --- /dev/null +++ b/idea/testData/inspections/naming/property/test.kt @@ -0,0 +1,30 @@ +val Foo: String = "" + +var FOO_BAR: Int = 0 + +const val THREE = 3 + +val xyzzy = 1 + +fun foo() { + val XYZZY = 1 + val BAR_BAZ = 2 +} + +object Foo { + val Foo: String = "" + + var FOO_BAR: Int = 0 +} + +class D { + private val _foo: String + + private val FOO_BAR: String + + companion object { + val Foo: String = "" + + var FOO_BAR: Int = 0 + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java index 94dca26c850..a90c8b47f03 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java @@ -245,6 +245,36 @@ public class InspectionTestGenerated extends AbstractInspectionTest { doTest(fileName); } + @TestMetadata("naming/class/inspectionData/inspections.test") + public void testNaming_class_inspectionData_Inspections_test() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/naming/class/inspectionData/inspections.test"); + doTest(fileName); + } + + @TestMetadata("naming/enumEntry/inspectionData/inspections.test") + public void testNaming_enumEntry_inspectionData_Inspections_test() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/naming/enumEntry/inspectionData/inspections.test"); + doTest(fileName); + } + + @TestMetadata("naming/function/inspectionData/inspections.test") + public void testNaming_function_inspectionData_Inspections_test() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/naming/function/inspectionData/inspections.test"); + doTest(fileName); + } + + @TestMetadata("naming/privateProperty/inspectionData/inspections.test") + public void testNaming_privateProperty_inspectionData_Inspections_test() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/naming/privateProperty/inspectionData/inspections.test"); + doTest(fileName); + } + + @TestMetadata("naming/property/inspectionData/inspections.test") + public void testNaming_property_inspectionData_Inspections_test() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/naming/property/inspectionData/inspections.test"); + doTest(fileName); + } + @TestMetadata("nullableBooleanElvis/inspectionData/inspections.test") public void testNullableBooleanElvis_inspectionData_Inspections_test() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/nullableBooleanElvis/inspectionData/inspections.test");