Skip to content

Commit

Permalink
Add support for editorconfig generation in 'final-newline' rule.
Browse files Browse the repository at this point in the history
Signed-off-by: Yahor Berdnikau <egorr.berd@gmail.com>
  • Loading branch information
Tapchicoma committed Sep 8, 2020
1 parent 7fbde3f commit aa8f239
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@ interface EditorConfig {
val indentSize: Int
val tabWidth: Int
val maxLineLength: Int
@Deprecated(
message = "Not used anymore by rules, please use 'insert_final_newline' directly via get()"
)
val insertFinalNewline: Boolean
fun get(key: String): String?

operator fun get(key: String): String?

companion object {
fun fromMap(map: Map<String, String>): EditorConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,29 @@ package com.pinterest.ktlint.ruleset.standard

import com.pinterest.ktlint.core.KtLint
import com.pinterest.ktlint.core.Rule
import com.pinterest.ktlint.core.api.EditorConfigProperties
import com.pinterest.ktlint.core.api.FeatureInAlphaState
import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.core.ast.isRoot
import org.ec4j.core.model.PropertyType
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
import org.jetbrains.kotlin.com.intellij.psi.PsiWhiteSpace
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl

class FinalNewlineRule : Rule("final-newline"), Rule.Modifier.RestrictToRoot {
@OptIn(FeatureInAlphaState::class)
public class FinalNewlineRule :
Rule("final-newline"),
Rule.Modifier.RestrictToRoot,
UsesEditorConfigProperties {

private val insertNewLineProperty = UsesEditorConfigProperties.EditorConfigProperty(
type = PropertyType.insert_final_newline,
defaultValue = true
)

override val editorconfigProperties: List<UsesEditorConfigProperties.EditorConfigProperty<*>> = listOf(
insertNewLineProperty
)

override fun visit(
node: ASTNode,
Expand All @@ -16,8 +33,9 @@ class FinalNewlineRule : Rule("final-newline"), Rule.Modifier.RestrictToRoot {
) {
if (node.isRoot()) {
if (node.textLength == 0) return
val editorConfig = node.getUserData(KtLint.EDITOR_CONFIG_USER_DATA_KEY)!!
val insertFinalNewline = editorConfig.insertFinalNewline
val editorConfigProperties: EditorConfigProperties =
node.getUserData(KtLint.EDITOR_CONFIG_PROPERTIES_USER_DATA_KEY)!!
val insertFinalNewline = editorConfigProperties.getEditorConfigValue(insertNewLineProperty)
val lastNode = lastChildNodeOf(node)
if (insertFinalNewline) {
if (lastNode !is PsiWhiteSpace || !lastNode.textContains('\n')) {
Expand Down

0 comments on commit aa8f239

Please sign in to comment.