Skip to content

Commit 1bc662e

Browse files
committed
Always insert a line break before a block comment.
1 parent 466a397 commit 1bc662e

File tree

1 file changed

+14
-49
lines changed

1 file changed

+14
-49
lines changed

src/main/kotlin/org/domaframework/doma/intellij/formatter/processor/SqlFormatPreProcessor.kt

Lines changed: 14 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import org.domaframework.doma.intellij.common.util.InjectionSqlUtil.isInjectedSq
3030
import org.domaframework.doma.intellij.common.util.PluginLoggerUtil
3131
import org.domaframework.doma.intellij.common.util.StringUtil.LINE_SEPARATE
3232
import org.domaframework.doma.intellij.common.util.StringUtil.SINGLE_SPACE
33-
import org.domaframework.doma.intellij.formatter.util.CreateQueryType
3433
import org.domaframework.doma.intellij.formatter.util.SqlKeywordUtil
3534
import org.domaframework.doma.intellij.formatter.visitor.SqlFormatVisitor
3635
import org.domaframework.doma.intellij.psi.SqlTypes
@@ -80,7 +79,6 @@ class SqlFormatPreProcessor : PreFormatProcessor {
8079
var keywordIndex = replaceKeywordList.size
8180

8281
visitor.replaces.asReversed().forEach {
83-
val createQueryType = getCreateQueryGroup(keywordList, index)
8482
val textRangeStart = it.startOffset
8583
val textRangeEnd = textRangeStart + it.text.length
8684
if (it.elementType != TokenType.WHITE_SPACE) {
@@ -102,26 +100,17 @@ class SqlFormatPreProcessor : PreFormatProcessor {
102100
getRightPatternNewText(it)
103101
}
104102

105-
SqlTypes.WORD -> {
106-
newKeyword = getWordNewText(it, newKeyword, createQueryType)
103+
SqlTypes.WORD, SqlTypes.FUNCTION_NAME -> {
104+
newKeyword = getWordNewText(it, newKeyword)
107105
}
108106

109107
SqlTypes.COMMA, SqlTypes.OTHER -> {
110108
newKeyword = getNewLineString(it.prevSibling, getUpperText(it))
111109
}
112110

113111
SqlTypes.BLOCK_COMMENT_START -> {
114-
val lastKeyword =
115-
if (keywordIndex > 0) {
116-
replaceKeywordList[keywordIndex - 1]
117-
} else {
118-
null
119-
}
120-
121-
if (lastKeyword != null && lastKeyword.text.lowercase() == "values") {
122-
newKeyword =
123-
getNewLineString(PsiTreeUtil.prevLeaf(it), getUpperText(it))
124-
}
112+
newKeyword =
113+
getNewLineString(PsiTreeUtil.prevLeaf(it), getUpperText(it))
125114
}
126115
}
127116
document.deleteString(textRangeStart, textRangeEnd)
@@ -144,9 +133,10 @@ class SqlFormatPreProcessor : PreFormatProcessor {
144133
val originalText = document.getText(range)
145134
val nextElement = element.nextSibling
146135
val nextElementText = nextElement?.let { document.getText(it.textRange) } ?: ""
136+
val preElement = element.prevSibling
147137

148138
var newText = ""
149-
if (!targetElementTypes.contains(nextElement?.elementType)) {
139+
if (!targetElementTypes.contains(nextElement?.elementType) && preElement?.elementType != SqlTypes.BLOCK_COMMENT) {
150140
newText = originalText.replace(originalText, SINGLE_SPACE)
151141
} else {
152142
newText =
@@ -186,7 +176,7 @@ class SqlFormatPreProcessor : PreFormatProcessor {
186176
val keywordText = element.text.lowercase()
187177
val upperText = getUpperText(element)
188178
return if (SqlKeywordUtil.getIndentType(keywordText).isNewLineGroup()) {
189-
val prevElement = PsiTreeUtil.prevLeaf(element)
179+
val prevElement = element.prevSibling
190180
getNewLineString(prevElement, upperText)
191181
} else {
192182
upperText
@@ -201,15 +191,13 @@ class SqlFormatPreProcessor : PreFormatProcessor {
201191
private fun getWordNewText(
202192
element: PsiElement,
203193
newKeyword: String,
204-
createQueryType: CreateQueryType,
205194
): String {
206195
newKeyword
207196
var prev = element.prevSibling
208197
var isColumnName = true
209198
while (prev != null && prev.elementType != SqlTypes.LEFT_PAREN && prev.elementType != SqlTypes.COMMA) {
210199
if (prev !is PsiWhiteSpace &&
211-
prev.elementType != SqlTypes.LINE_COMMENT &&
212-
prev.elementType != SqlTypes.BLOCK_COMMENT
200+
prev.elementType != SqlTypes.LINE_COMMENT
213201
) {
214202
isColumnName =
215203
prev.elementType == SqlTypes.COMMA ||
@@ -219,45 +207,22 @@ class SqlFormatPreProcessor : PreFormatProcessor {
219207
prev = prev.prevSibling
220208
}
221209

222-
return if (createQueryType == CreateQueryType.TABLE && isColumnName) {
210+
return if (prev.elementType == SqlTypes.BLOCK_COMMENT) {
223211
getNewLineString(element.prevSibling, getUpperText(element))
224212
} else {
225213
getUpperText(element)
226214
}
227215
}
228216

229-
private fun getCreateQueryGroup(
230-
keywordList: List<PsiElement>,
231-
index: Int,
232-
): CreateQueryType {
233-
var topLastKeyWord: PsiElement? = null
234-
var attachmentKeywordType = CreateQueryType.NONE
235-
keywordList
236-
.dropLast(keywordList.size.minus(index))
237-
.filter {
238-
it.elementType == SqlTypes.KEYWORD
239-
}.asReversed()
240-
.forEach { key ->
241-
if (SqlKeywordUtil.Companion.isTopKeyword(key.text)) {
242-
topLastKeyWord = key
243-
return@forEach
244-
}
245-
if (SqlKeywordUtil.Companion.isAttachedKeyword(key.text)) {
246-
attachmentKeywordType = CreateQueryType.Companion.getCreateTableType(key.text)
247-
}
248-
}
249-
val prevKeywordText = topLastKeyWord?.text?.lowercase()
250-
val isCreateGroup = prevKeywordText == "create"
251-
if (!isCreateGroup) return CreateQueryType.NONE
252-
return attachmentKeywordType
253-
}
254-
255217
private fun getNewLineString(
256218
prevElement: PsiElement?,
257219
text: String,
258220
): String =
259-
if (prevElement?.text?.contains(LINE_SEPARATE) == false &&
260-
PsiTreeUtil.prevLeaf(prevElement) != null
221+
if (prevElement?.elementType == SqlTypes.BLOCK_COMMENT ||
222+
(
223+
prevElement?.text?.contains(LINE_SEPARATE) == false &&
224+
prevElement.prevSibling != null
225+
)
261226
) {
262227
"$LINE_SEPARATE$text"
263228
} else {

0 commit comments

Comments
 (0)