Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added naming rule for packages #299

Merged
merged 2 commits into from Aug 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.psi.KtEnumEntry
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtObjectDeclaration
import org.jetbrains.kotlin.psi.KtPackageDirective
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.KtVariableDeclaration
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
Expand All @@ -33,6 +34,15 @@ class NamingConventionViolation(config: Config = Config.empty) : Rule(config) {
private val methodPattern = Regex(valueOrDefault(METHOD_PATTERN, "^[a-z$][a-zA-Z$0-9]*$"))
private val classPattern = Regex(valueOrDefault(CLASS_PATTERN, "^[A-Z$][a-zA-Z$]*$"))
private val enumEntryPattern = Regex(valueOrDefault(ENUM_PATTERN, "^[A-Z$][A-Z_$]*$"))
private val packagePattern = Regex(valueOrDefault(PACKAGE_PATTERN, "^[a-z]+(\\.[a-z][a-z0-9]*)*$"))

override fun visitPackageDirective(directive: KtPackageDirective, data: Void?): Void? {
val name = directive.qualifiedName
if (name.isNotEmpty() && !name.matches(packagePattern)) {
report(CodeSmell(issue, Entity.from(directive)))
}
return null
}

override fun visitNamedDeclaration(declaration: KtNamedDeclaration) {
if (declaration.nameAsSafeName.isSpecial) return
Expand Down Expand Up @@ -84,6 +94,7 @@ class NamingConventionViolation(config: Config = Config.empty) : Rule(config) {
const val METHOD_PATTERN = "methodPattern"
const val CLASS_PATTERN = "classPattern"
const val ENUM_PATTERN = "enumEntryPattern"
const val PACKAGE_PATTERN = "packagePattern"
}

}
Expand Up @@ -46,6 +46,26 @@ class NamingConventionTest {
)).hasSize(0)
}

@Test
fun upperCasePackageDirectiveName() {
assertThat(NamingConventionViolation().lint("package FOO.BAR")).hasSize(1)
}

@Test
fun upperCamelCasePackageDirectiveName() {
assertThat(NamingConventionViolation().lint("package Foo.Bar")).hasSize(1)
}

@Test
fun camelCasePackageDirectiveName() {
assertThat(NamingConventionViolation().lint("package fOO.bAR")).hasSize(1)
}

@Test
fun correctPackageDirectiveName() {
assertThat(NamingConventionViolation().lint("package foo.bar")).hasSize(0)
}

@Test
fun uppercaseAndUnderscoreAreAllowedLowercaseNotForEnumEntries() {
val lint = NamingConventionViolation().lint(
Expand Down