lint: StaredImportsDetector.

This commit is contained in:
oxy
2023-10-07 17:11:34 +08:00
parent a8b6f322c6
commit 2a76146be0
5 changed files with 58 additions and 9 deletions

View File

@ -1,13 +1,16 @@
package com.m3u.lint.helper
package com.m3u.lint
import com.android.tools.lint.client.api.IssueRegistry
import com.android.tools.lint.client.api.Vendor
import com.android.tools.lint.detector.api.Issue
import com.m3u.lint.helper.UseHelperInsteadOfWindowInsetsDetector.Companion.UseHelperIssue
import com.m3u.lint.detectors.HelperDetector
import com.m3u.lint.detectors.StaredImportsDetector
class UseHelperInsteadOfWindowInsetsIssueRegistry : IssueRegistry() {
override val issues: List<Issue>
get() = listOf(UseHelperIssue)
class M3UIssueRegistry : IssueRegistry() {
override val issues: List<Issue> = listOf(
HelperDetector.UseHelperIssue,
StaredImportsDetector.StaredImportsIssue
)
override val vendor: Vendor = Vendor(
vendorName = "M3UAndroid Project",
feedbackUrl = "https://t.me/m3u_android_chat",

View File

@ -1,4 +1,4 @@
package com.m3u.lint.helper
package com.m3u.lint.detectors
import com.android.tools.lint.detector.api.Category
import com.android.tools.lint.detector.api.Detector
@ -13,7 +13,7 @@ import com.intellij.psi.PsiMethod
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.getContainingUMethod
class UseHelperInsteadOfWindowInsetsDetector : Detector(), SourceCodeScanner {
class HelperDetector : Detector(), SourceCodeScanner {
override fun getApplicableMethodNames(): List<String> = listOf("show", "hide")
override fun visitMethodCall(context: JavaContext, node: UCallExpression, method: PsiMethod) {
@ -98,7 +98,7 @@ class UseHelperInsteadOfWindowInsetsDetector : Detector(), SourceCodeScanner {
category = Category.CORRECTNESS,
severity = Severity.FATAL,
implementation = Implementation(
UseHelperInsteadOfWindowInsetsDetector::class.java,
HelperDetector::class.java,
Scope.JAVA_FILE_SCOPE
)
)

View File

@ -0,0 +1,45 @@
package com.m3u.lint.detectors
import com.android.tools.lint.client.api.UElementHandler
import com.android.tools.lint.detector.api.Category
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Implementation
import com.android.tools.lint.detector.api.Issue
import com.android.tools.lint.detector.api.JavaContext
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import org.jetbrains.uast.UImportStatement
import java.util.EnumSet
class StaredImportsDetector : Detector(), SourceCodeScanner {
override fun getApplicableUastTypes() = listOf(UImportStatement::class.java)
override fun createUastHandler(context: JavaContext) = object : UElementHandler() {
override fun visitImportStatement(node: UImportStatement) {
val reference = node.importReference ?: return
if (node.isOnDemand) {
context.report(
issue = StaredImportsIssue,
scope = reference,
location = context.getLocation(reference),
message = "Using special import instead of star-import."
)
}
}
}
companion object {
val StaredImportsIssue = Issue.create(
id = "StaredImportsIssue",
briefDescription = "using special imports instead",
explanation = "using special imports instead of stared imports",
category = Category.CORRECTNESS,
severity = Severity.WARNING,
implementation = Implementation(
StaredImportsDetector::class.java,
EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES)
)
)
}
}

View File

@ -1 +1 @@
com.m3u.lint.helper.UseHelperInsteadOfWindowInsetsIssueRegistry
com.m3u.lint.M3UIssueRegistry