plugin fixes: incorrect reformatting on }, incorrect parsing of class minidocs

This commit is contained in:
sergeych committed 2026-01-04 11:58:55 +01:00
1 parent 1d9befe101
commit 9e138367ef
4 files changed
+73 -6

No files matched your search

@@ -1773,10 +1773,11 @@ class Compiler(
}
private fun parseEnumDeclaration(): Statement {
val startPos = pendingDeclStart ?: cc.currentPos()
val nameToken = cc.requireToken(Token.Type.ID)
val startPos = pendingDeclStart ?: nameToken.pos
val doc = pendingDeclDoc ?: consumePendingDoc()
pendingDeclDoc = null
val nameToken = cc.requireToken(Token.Type.ID)
pendingDeclStart = null
// so far only simplest enums:
val names = mutableListOf<String>()
// skip '{'
@@ -1822,6 +1823,10 @@ class Compiler(
private suspend fun parseClassDeclaration(): Statement {
val nameToken = cc.requireToken(Token.Type.ID)
val startPos = pendingDeclStart ?: nameToken.pos
val doc = pendingDeclDoc ?: consumePendingDoc()
pendingDeclDoc = null
pendingDeclStart = null
return inCodeContext(CodeContext.ClassBody(nameToken.value)) {
val constructorArgsDeclaration =
if (cc.skipTokenOfType(Token.Type.LPAREN, isOptional = true))
@@ -1879,7 +1884,7 @@ class Compiler(
// Emit MiniClassDecl with collected base names; bodyRange is omitted for now
run {
val declRange = MiniRange(pendingDeclStart ?: nameToken.pos, cc.currentPos())
val declRange = MiniRange(startPos, cc.currentPos())
val bases = baseSpecs.map { it.name }
// Collect constructor fields declared as val/var in primary constructor
val ctorFields = mutableListOf<MiniCtorField>()
@@ -1903,11 +1908,10 @@ class Compiler(
bases = bases,
bodyRange = classBodyRange,
ctorFields = ctorFields,
doc = pendingDeclDoc,
doc = doc,
nameStart = nameToken.pos
)
miniSink?.onClassDecl(node)
pendingDeclDoc = null
}
val initScope = popInitScope()
@@ -288,7 +288,20 @@ object LyngFormatter {
i++
}
// Normalize collected base indent: replace tabs with spaces
var baseIndent = if (onlyWs) base.toString().replace("\t", " ".repeat(config.indentSize)) else ""
var baseIndent = if (onlyWs) {
if (start == lineStart) {
// Range starts at line start, pick up this line's indentation as base
var k = start
val lineIndent = StringBuilder()
while (k < text.length && text[k] != '\n' && (text[k] == ' ' || text[k] == '\t')) {
lineIndent.append(text[k])
k++
}
lineIndent.toString().replace("\t", " ".repeat(config.indentSize))
} else {
base.toString().replace("\t", " ".repeat(config.indentSize))
}
} else ""
var parentBaseIndent: String? = baseIndent
if (baseIndent.isEmpty()) {
// Fallback: use the indent of the nearest previous non-empty line as base.