aboutsummaryrefslogtreecommitdiff
path: root/detekt/src/main/kotlin/formatting
diff options
context:
space:
mode:
Diffstat (limited to 'detekt/src/main/kotlin/formatting')
-rw-r--r--detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt51
-rw-r--r--detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt17
2 files changed, 68 insertions, 0 deletions
diff --git a/detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt b/detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt
new file mode 100644
index 000000000..aaf7896cf
--- /dev/null
+++ b/detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt
@@ -0,0 +1,51 @@
+package at.hannibal2.skyhanni.detektrules.formatting
+
+import io.gitlab.arturbosch.detekt.api.CodeSmell
+import io.gitlab.arturbosch.detekt.api.Config
+import io.gitlab.arturbosch.detekt.api.Debt
+import io.gitlab.arturbosch.detekt.api.Entity
+import io.gitlab.arturbosch.detekt.api.Issue
+import io.gitlab.arturbosch.detekt.api.Rule
+import io.gitlab.arturbosch.detekt.api.Severity
+import org.jetbrains.kotlin.com.intellij.psi.PsiComment
+
+class CustomCommentSpacing(config: Config) : Rule(config) {
+ override val issue = Issue(
+ "CustomCommentSpacing",
+ Severity.Style,
+ "Enforces custom spacing rules for comments.",
+ Debt.FIVE_MINS
+ )
+
+ private val allowedPatterns = listOf(
+ "#if",
+ "#else",
+ "#elseif",
+ "#endif",
+ "$$"
+ )
+
+ override fun visitComment(comment: PsiComment) {
+ if (allowedPatterns.any { comment.text.contains(it) }) {
+ return
+ }
+
+ /**
+ * REGEX-TEST: // Test comment
+ * REGEX-TEST: /* Test comment */
+ */
+ val commentRegex = Regex("""^(?:\/{2}|\/\*)(?:\s.*|$)""", RegexOption.DOT_MATCHES_ALL)
+ if (!commentRegex.matches(comment.text)) {
+ report(
+ CodeSmell(
+ issue,
+ Entity.from(comment),
+ "Expected space after opening comment."
+ )
+ )
+ }
+
+ // Fallback to super (ostensibly a no-check)
+ super.visitComment(comment)
+ }
+}
diff --git a/detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt b/detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt
new file mode 100644
index 000000000..a0a969bcf
--- /dev/null
+++ b/detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt
@@ -0,0 +1,17 @@
+package at.hannibal2.skyhanni.detektrules.formatting
+
+import com.google.auto.service.AutoService
+import io.gitlab.arturbosch.detekt.api.Config
+import io.gitlab.arturbosch.detekt.api.RuleSet
+import io.gitlab.arturbosch.detekt.api.RuleSetProvider
+
+@AutoService(RuleSetProvider::class)
+class FormattingRuleSetProvider : RuleSetProvider {
+ override val ruleSetId: String = "FormattingRules"
+
+ override fun instance(config: Config): RuleSet {
+ return RuleSet(ruleSetId, listOf(
+ CustomCommentSpacing(config)
+ ))
+ }
+}