Flushing current state for a release.
This commit is contained in:
@@ -19,7 +19,9 @@ object AssemblerDirectives {
|
||||
"align", "even", "odd", "cnop", "long", "dphrase", "phrase", "qphrase",
|
||||
|
||||
"cargs", "comm", "comment",
|
||||
"rsset", "clrfo", "clrso", "setfo", "setso"
|
||||
"rsset", "clrfo", "clrso", "setfo", "setso",
|
||||
|
||||
"rsreset", "rs.b", "rs.w", "rs.l"
|
||||
)
|
||||
|
||||
val plainDirectives: Set<String> = setOf(
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.Alignment
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.formatting.Spacing
|
||||
import com.intellij.formatting.Wrap
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
import com.intellij.psi.formatter.common.AbstractBlock
|
||||
|
||||
class M68kAsmAssignmentBlock(
|
||||
node: ASTNode, wrap: Wrap?, alignment: Alignment?,
|
||||
private val codeStyleSettings: CodeStyleSettings
|
||||
) : AbstractBlock(node, wrap, alignment) {
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
|
||||
return Spacing.getReadOnlySpacing()
|
||||
}
|
||||
|
||||
override fun isLeaf() = true
|
||||
|
||||
override fun buildChildren() = emptyList<Block>()
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.*
|
||||
import com.intellij.formatting.Alignment
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.formatting.Spacing
|
||||
import com.intellij.formatting.Wrap
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.TokenType
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
@@ -9,17 +12,21 @@ import de.platon42.intellij.plugins.m68k.psi.M68kTypes
|
||||
|
||||
class M68kAsmBlock(
|
||||
node: ASTNode, wrap: Wrap?, alignment: Alignment?,
|
||||
private val column: Int,
|
||||
val column: Int,
|
||||
private val codeStyleSettings: CodeStyleSettings
|
||||
) : AbstractBlock(node, wrap, alignment) {
|
||||
|
||||
override fun getIndent() = Indent.getNoneIndent()
|
||||
|
||||
private fun normalIndent(): Indent {
|
||||
return IndentImpl(Indent.Type.SPACES, true, codeStyleSettings.indentOptions.INDENT_SIZE, false, false)
|
||||
}
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
|
||||
if (child1 is M68kAsmBlock && child2 is M68kAsmBlock) {
|
||||
val columnDiff = child2.column - child1.column
|
||||
if (columnDiff > 0) {
|
||||
var minSpaces = columnDiff * codeStyleSettings.indentOptions.INDENT_SIZE - child1.node.textLength
|
||||
while (minSpaces < 1) {
|
||||
minSpaces += codeStyleSettings.indentOptions.INDENT_SIZE
|
||||
}
|
||||
return Spacing.createSpacing(minSpaces, minSpaces, 0, false, 0)
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -27,6 +34,10 @@ class M68kAsmBlock(
|
||||
|
||||
override fun buildChildren(): List<Block> {
|
||||
val subBlocks = ArrayList<Block>()
|
||||
if (myNode.elementType == M68kTypes.ASM_OP) {
|
||||
return subBlocks
|
||||
}
|
||||
|
||||
var child = myNode.firstChildNode
|
||||
var newColumn = column
|
||||
while (child != null) {
|
||||
@@ -34,14 +45,14 @@ class M68kAsmBlock(
|
||||
subBlocks.add(
|
||||
M68kAsmBlock(
|
||||
child,
|
||||
Wrap.createWrap(WrapType.NONE, false),
|
||||
Alignment.createAlignment(),
|
||||
null,
|
||||
null,
|
||||
newColumn,
|
||||
codeStyleSettings
|
||||
)
|
||||
)
|
||||
if (child.elementType == M68kTypes.ASM_OP) {
|
||||
newColumn++
|
||||
newColumn += 2
|
||||
}
|
||||
}
|
||||
child = child.treeNext
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.formatting.Spacing
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
import com.intellij.psi.formatter.common.AbstractBlock
|
||||
|
||||
class M68kAsmCommentBlock(
|
||||
node: ASTNode,
|
||||
private val codeStyleSettings: CodeStyleSettings
|
||||
) : AbstractBlock(node, null, null) {
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
|
||||
return Spacing.getReadOnlySpacing()
|
||||
}
|
||||
|
||||
override fun isLeaf() = true
|
||||
|
||||
override fun buildChildren() = emptyList<Block>()
|
||||
}
|
||||
@@ -1,15 +1,10 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.*
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.formatter.common.AbstractBlock
|
||||
|
||||
class M68kAsmEolBlock(node: ASTNode) : AbstractBlock(
|
||||
node, Wrap.createWrap(WrapType.NONE, false),
|
||||
Alignment.createAlignment()
|
||||
) {
|
||||
|
||||
override fun getIndent() = Indent.getNoneIndent()
|
||||
class M68kAsmEolBlock(node: ASTNode) : AbstractBlock(node, null, null) {
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block) = null
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.*
|
||||
import com.intellij.formatting.Alignment
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.formatting.Spacing
|
||||
import com.intellij.formatting.Wrap
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
import com.intellij.psi.formatter.common.AbstractBlock
|
||||
@@ -10,10 +13,6 @@ class M68kAsmLabelBlock(
|
||||
private val codeStyleSettings: CodeStyleSettings
|
||||
) : AbstractBlock(node, wrap, alignment) {
|
||||
|
||||
override fun getIndent(): Indent? {
|
||||
return Indent.getAbsoluteNoneIndent()
|
||||
}
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
|
||||
return Spacing.getReadOnlySpacing()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.formatting.Spacing
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
import com.intellij.psi.formatter.common.AbstractBlock
|
||||
|
||||
class M68kAsmMacroDefBlock(
|
||||
node: ASTNode,
|
||||
private val codeStyleSettings: CodeStyleSettings
|
||||
) : AbstractBlock(node, null, null) {
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
|
||||
return Spacing.getReadOnlySpacing()
|
||||
}
|
||||
|
||||
override fun isLeaf() = true
|
||||
|
||||
override fun buildChildren() = emptyList<Block>()
|
||||
}
|
||||
@@ -1,22 +1,39 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.*
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.formatting.Indent
|
||||
import com.intellij.formatting.Spacing
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.PsiComment
|
||||
import com.intellij.psi.TokenType
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
import com.intellij.psi.formatter.common.AbstractBlock
|
||||
import de.platon42.intellij.plugins.m68k.psi.M68kMacroDefinition
|
||||
import de.platon42.intellij.plugins.m68k.psi.M68kStatement
|
||||
import de.platon42.intellij.plugins.m68k.psi.M68kTypes
|
||||
|
||||
class M68kAsmRootBlock(node: ASTNode, private val codeStyleSettings: CodeStyleSettings) : AbstractBlock(node, null, null) {
|
||||
|
||||
override fun getIndent(): Indent? {
|
||||
return Indent.getNoneIndent()
|
||||
return Indent.getAbsoluteNoneIndent()
|
||||
}
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
|
||||
if (child2 is M68kAsmEolBlock) {
|
||||
return Spacing.createSpacing(0, 0, 0, false, 0)
|
||||
//return null
|
||||
}
|
||||
if (child2 is M68kAsmMacroDefBlock) {
|
||||
return child2.getSpacing(child1, child2)
|
||||
}
|
||||
if (child2 is M68kAsmCommentBlock) {
|
||||
if (child1 is M68kAsmStatementBlock) {
|
||||
val indentSize = codeStyleSettings.indentOptions.INDENT_SIZE
|
||||
val oddIdent = indentSize - (child1.node.textLength % indentSize)
|
||||
return Spacing.createSpacing(oddIdent, Integer.MAX_VALUE, 0, false, 0)
|
||||
} else {
|
||||
return Spacing.getReadOnlySpacing()
|
||||
}
|
||||
}
|
||||
if (child2.subBlocks.isNotEmpty()) {
|
||||
return child2.getSpacing(child1, child2.subBlocks.first())
|
||||
@@ -37,15 +54,12 @@ class M68kAsmRootBlock(node: ASTNode, private val codeStyleSettings: CodeStyleSe
|
||||
} else if (child.elementType != TokenType.WHITE_SPACE) {
|
||||
if (child.psi is M68kStatement) {
|
||||
subBlocks.add(M68kAsmStatementBlock(child, codeStyleSettings))
|
||||
} else if (child.psi is M68kMacroDefinition) {
|
||||
subBlocks.add(M68kAsmMacroDefBlock(child, codeStyleSettings))
|
||||
} else if (child.psi is PsiComment) {
|
||||
subBlocks.add(M68kAsmCommentBlock(child, codeStyleSettings))
|
||||
} else {
|
||||
subBlocks.add(
|
||||
M68kAsmBlock(
|
||||
child,
|
||||
Wrap.createWrap(WrapType.NONE, false),
|
||||
Alignment.createAlignment(),
|
||||
0, codeStyleSettings
|
||||
)
|
||||
)
|
||||
subBlocks.add(M68kAsmBlock(child, null, null, 0, codeStyleSettings))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+19
-51
@@ -1,6 +1,8 @@
|
||||
package de.platon42.intellij.plugins.m68k.formatter
|
||||
|
||||
import com.intellij.formatting.*
|
||||
import com.intellij.formatting.Block
|
||||
import com.intellij.formatting.Indent
|
||||
import com.intellij.formatting.Spacing
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.TokenType
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
@@ -8,15 +10,15 @@ import com.intellij.psi.formatter.common.AbstractBlock
|
||||
import de.platon42.intellij.plugins.m68k.psi.*
|
||||
|
||||
class M68kAsmStatementBlock(node: ASTNode, private val codeStyleSettings: CodeStyleSettings) :
|
||||
AbstractBlock(node, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment()) {
|
||||
AbstractBlock(node, null, null) {
|
||||
|
||||
override fun getIndent(): Indent {
|
||||
override fun getIndent(): Indent? {
|
||||
val statement = myNode.psi as M68kStatement
|
||||
if (((statement.asmInstruction != null) || (statement.preprocessorDirective != null)
|
||||
if (((statement.asmInstruction != null) || (statement.asmInstruction != null) || (statement.preprocessorDirective != null)
|
||||
|| (statement.macroCall != null))
|
||||
&& ((statement.localLabel == null) && (statement.globalLabel == null))
|
||||
) {
|
||||
return IndentImpl(Indent.Type.SPACES, true, codeStyleSettings.indentOptions.INDENT_SIZE, false, false)
|
||||
return null
|
||||
} else {
|
||||
return Indent.getAbsoluteNoneIndent()
|
||||
}
|
||||
@@ -24,22 +26,22 @@ class M68kAsmStatementBlock(node: ASTNode, private val codeStyleSettings: CodeSt
|
||||
|
||||
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
|
||||
if (child2 is M68kAsmBlock) {
|
||||
val indentSize = codeStyleSettings.indentOptions.INDENT_SIZE
|
||||
if (child1 is M68kAsmEolBlock) {
|
||||
return Spacing.createSpacing(1, indentSize, 0, true, 0)
|
||||
val indentSize = codeStyleSettings.indentOptions.INDENT_SIZE * child2.column
|
||||
if (child1 is M68kAsmEolBlock || child1 is M68kAsmCommentBlock) {
|
||||
return Spacing.createSpacing(indentSize, indentSize, 0, true, 0)
|
||||
}
|
||||
if (child1 is M68kAsmLabelBlock) {
|
||||
val spacesLeft = indentSize - child1.node.textLength
|
||||
if (spacesLeft <= 0) {
|
||||
return Spacing.createSpacing(1, indentSize, 1, false, 0)
|
||||
return Spacing.createSpacing(0, 0, 1, true, 0)
|
||||
} else {
|
||||
return Spacing.createSpacing(1, spacesLeft, 0, false, 0)
|
||||
return Spacing.createSpacing(spacesLeft, spacesLeft, 0, true, 0)
|
||||
}
|
||||
}
|
||||
return Spacing.createSpacing(1, indentSize, 0, false, 0)
|
||||
return Spacing.createSpacing(indentSize, indentSize, 0, true, 0)
|
||||
}
|
||||
if (child2 is M68kAsmLabelBlock) {
|
||||
return Spacing.createSpacing(0, 0, 0, false, 0)
|
||||
if (child2 is M68kAsmLabelBlock || child2 is M68kAsmAssignmentBlock) {
|
||||
return Spacing.createSpacing(0, 0, 0, true, 0)
|
||||
}
|
||||
return null
|
||||
}
|
||||
@@ -53,49 +55,15 @@ class M68kAsmStatementBlock(node: ASTNode, private val codeStyleSettings: CodeSt
|
||||
if (child.elementType != TokenType.WHITE_SPACE) {
|
||||
val element = child.psi
|
||||
when (element) {
|
||||
is M68kAssignment ->
|
||||
subBlocks.add(
|
||||
M68kAsmBlock(
|
||||
child,
|
||||
Wrap.createWrap(WrapType.NORMAL, false),
|
||||
Alignment.createAlignment(),
|
||||
0,
|
||||
codeStyleSettings
|
||||
)
|
||||
)
|
||||
is M68kAssignment -> subBlocks.add(M68kAsmAssignmentBlock(child, null, null, codeStyleSettings))
|
||||
|
||||
is M68kAsmInstruction, is M68kPreprocessorDirective, is M68kMacroCall ->
|
||||
subBlocks.add(
|
||||
M68kAsmBlock(
|
||||
child,
|
||||
Wrap.createWrap(WrapType.NORMAL, false),
|
||||
Alignment.createAlignment(),
|
||||
1,
|
||||
codeStyleSettings
|
||||
)
|
||||
)
|
||||
subBlocks.add(M68kAsmBlock(child, null, null, 2, codeStyleSettings))
|
||||
|
||||
is M68kGlobalLabel, is M68kLocalLabel ->
|
||||
subBlocks.add(
|
||||
M68kAsmLabelBlock(
|
||||
child,
|
||||
Wrap.createWrap(WrapType.NONE, false),
|
||||
Alignment.createAlignment(),
|
||||
codeStyleSettings
|
||||
)
|
||||
)
|
||||
subBlocks.add(M68kAsmLabelBlock(child, null, null, codeStyleSettings))
|
||||
|
||||
|
||||
else ->
|
||||
subBlocks.add(
|
||||
M68kAsmBlock(
|
||||
child,
|
||||
Wrap.createWrap(WrapType.NONE, false),
|
||||
Alignment.createAlignment(),
|
||||
1,
|
||||
codeStyleSettings
|
||||
)
|
||||
)
|
||||
else -> subBlocks.add(M68kAsmBlock(child, null, null, 1, codeStyleSettings))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
implementationClass="de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighterFactory"/>
|
||||
<lang.foldingBuilder language="MC68000"
|
||||
implementationClass="de.platon42.intellij.plugins.m68k.folding.M68kFoldingBuilder"/>
|
||||
<lang.formatter language="MC68000"
|
||||
implementationClass="de.platon42.intellij.plugins.m68k.formatter.M68kAsmFormattingModelBuilder"/>
|
||||
<!--lang.formatter language="MC68000"
|
||||
implementationClass="de.platon42.intellij.plugins.m68k.formatter.M68kAsmFormattingModelBuilder"/-->
|
||||
<codeStyleSettingsProvider implementation="de.platon42.intellij.plugins.m68k.formatter.M68kAsmCodeStyleSettingsProvider"/>
|
||||
<langCodeStyleSettingsProvider implementation="de.platon42.intellij.plugins.m68k.formatter.M68kLanguageCodeStyleSettingsProvider"/>
|
||||
<navbar implementation="de.platon42.intellij.plugins.m68k.navigation.M68kStructureAwareNavbar"/>
|
||||
@@ -87,4 +87,4 @@
|
||||
|
||||
<actions>
|
||||
</actions>
|
||||
</idea-plugin>
|
||||
</idea-plugin>
|
||||
|
||||
@@ -1,13 +1,32 @@
|
||||
moveq.l #10,d1
|
||||
add.l #10,d1
|
||||
subq.b #2,d2
|
||||
bra.s .foo
|
||||
nop
|
||||
.foo move.l d2,d1
|
||||
rts
|
||||
.verylonglabel: stop #$2000
|
||||
FOO = 1234
|
||||
BAR = 1235
|
||||
|
||||
COUNTER SET COUNTER+1
|
||||
|
||||
FISH MACRO
|
||||
.fish\@ rts
|
||||
ENDM
|
||||
MACRO SOUP
|
||||
moveq.l #0,d0
|
||||
ENDM
|
||||
|
||||
; with space
|
||||
|
||||
; standalone comment
|
||||
moveq.l #10,d1 ; end of line comment
|
||||
FISH
|
||||
add.l #10,d1
|
||||
SOUP
|
||||
subq.b #2,d2 ; end of line comment
|
||||
bra.s .foo
|
||||
nop
|
||||
.foo move.l d2,d1
|
||||
rts
|
||||
.verylonglabel:
|
||||
stop #$2000
|
||||
|
||||
.narf
|
||||
moveq.l #2,d0
|
||||
moveq.l #2,d0
|
||||
|
||||
globallabel: moveq.l #0,d0
|
||||
globallabel:
|
||||
moveq.l #0,d0
|
||||
|
||||
@@ -1,10 +1,28 @@
|
||||
moveq.l #10,d1
|
||||
add.l #10,d1
|
||||
subq.b #2,d2
|
||||
bra.s .foo
|
||||
FOO = 1234
|
||||
BAR = 1235
|
||||
|
||||
COUNTER SET COUNTER+1
|
||||
|
||||
FISH MACRO
|
||||
.fish\@ rts
|
||||
ENDM
|
||||
MACRO SOUP
|
||||
moveq.l #0,d0
|
||||
ENDM
|
||||
|
||||
; with space
|
||||
|
||||
; standalone comment
|
||||
|
||||
moveq.l #10,d1; end of line comment
|
||||
FISH
|
||||
add.l #10,d1
|
||||
SOUP
|
||||
subq.b #2,d2 ; end of line comment
|
||||
bra.s .foo
|
||||
nop
|
||||
.foo move.l d2,d1
|
||||
rts
|
||||
rts
|
||||
.verylonglabel: stop #$2000
|
||||
|
||||
.narf
|
||||
|
||||
Reference in New Issue
Block a user