Skip to content

Commit b545294

Browse files
committed
## 2023.1.13
- fix: null access assertion - fix: gts template parsing issue - fix: fix gts formatting issues
1 parent 5a50124 commit b545294

File tree

3 files changed

+23
-18
lines changed

3 files changed

+23
-18
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
Changelog
44
===============================================================================
5+
## 2023.1.13
6+
- fix: null access assertion
7+
- fix: gts template parsing issue
8+
- fix: fix gts formatting issues
9+
510
## 2023.1.12
611
- fix: assertion reference not for same element
712

src/main/kotlin/com/emberjs/gts/GtsSupport.kt

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class GtsElementTypes {
140140
override fun appendCurrentTemplateToken(tokenEndOffset: Int, tokenText: CharSequence): TemplateDataModifications {
141141
val r = Regex("=\\s*$")
142142
return if (r.containsMatchIn(tokenText)) {
143-
TemplateDataModifications.fromRangeToRemove(tokenEndOffset, "\"\"")
143+
TemplateDataModifications.fromRangeToRemove(tokenEndOffset, "''")
144144
} else {
145145
super.appendCurrentTemplateToken(tokenEndOffset, tokenText)
146146
}
@@ -658,7 +658,7 @@ class JSAstBlockWrapper(block: ASTBlock, parent: JsBlockWrapper?): JsBlockWrappe
658658
}
659659
}
660660

661-
class RootBlockWrapper(val block: XmlTagBlock, val policy: HtmlPolicy, val rootIndent: Indent): XmlTagBlock(block.node, NoWrap, block.alignment, policy, rootIndent) {
661+
class RootBlockWrapper(val block: XmlTagBlock, val policy: HtmlPolicy): XmlTagBlock(block.node, NoWrap, block.alignment, policy, Indent.getNoneIndent()) {
662662

663663
var patched = false
664664
var parent: Block? = null
@@ -683,10 +683,10 @@ class RootBlockWrapper(val block: XmlTagBlock, val policy: HtmlPolicy, val rootI
683683
return subblocks.mapIndexed { index, it ->
684684
var indent = Indent.getNormalIndent()
685685
if (index == 0) {
686-
indent = Indent.getNoneIndent()
686+
indent = getBaseIndent()
687687
}
688688
if (index == subblocks.lastIndex) {
689-
indent = Indent.getNoneIndent()
689+
indent = getBaseIndent()
690690
}
691691
SynteticBlockWrapper(it, this, indent)
692692
}.toMutableList()
@@ -696,7 +696,7 @@ class RootBlockWrapper(val block: XmlTagBlock, val policy: HtmlPolicy, val rootI
696696
return Indent.getNoneIndent()
697697
}
698698

699-
override fun getChildAttributes(newChildIndex: Int): ChildAttributes {
699+
fun getBaseIndent(forChild: Boolean = false): Indent? {
700700
val file = this.node.psi.containingFile
701701
val project = this.node.psi.project
702702
val document = PsiDocumentManager.getInstance(project).getDocument(file)!!
@@ -705,16 +705,20 @@ class RootBlockWrapper(val block: XmlTagBlock, val policy: HtmlPolicy, val rootI
705705
val blockRef = this.parent as? JSAstBlockWrapper ?: ((this.parent as JsBlockWrapper).parent as JSAstBlockWrapper)
706706
val psiRef = blockRef.node!!.psi.parent
707707

708-
val startOffset = psiRef.textRange.startOffset
708+
val startOffset = psiRef.textRange?.startOffset ?: return Indent.getNormalIndent(true)
709709
val line = document.getLineNumber(startOffset)
710710
val lineOffset = document.getLineStartOffset(line)
711711
val offset = startOffset - lineOffset + ((blockRef.node!!.psi is JSClass).ifTrue { INDENT_SIZE } ?: 0)
712712

713713

714-
return ChildAttributes(Indent.getSpaceIndent(offset + INDENT_SIZE), null)
714+
return Indent.getSpaceIndent(offset + (forChild.ifTrue { INDENT_SIZE } ?: 0))
715715
}
716716

717-
return ChildAttributes(Indent.getNormalIndent(true), null)
717+
return Indent.getNormalIndent(true)
718+
}
719+
720+
override fun getChildAttributes(newChildIndex: Int): ChildAttributes {
721+
return ChildAttributes(Indent.getNoneIndent(), null)
718722
}
719723

720724
override fun getChildrenIndent(): Indent {
@@ -817,14 +821,7 @@ class GtsFormattingModelBuilder : AbstractXmlTemplateFormattingModelBuilder() {
817821
val documentModel = FormattingDocumentModelImpl.createOn(psiFile)
818822
val block = findTemplateRootBlock(hbsRootBlock, element) as? XmlTagBlock ?: return createModel(FormattingContext.create(node.psi, settings)).rootBlock
819823
var start = block.textRange.startOffset - 1
820-
var indent = Indent.getNormalIndent()
821-
while (start > 0 && psiFile.text[start] != '\n') {
822-
if (psiFile.text[start] != ' ') {
823-
indent = Indent.getNoneIndent()
824-
}
825-
start--
826-
}
827-
val rootBlock = RootBlockWrapper(block, HtmlPolicy(settings, documentModel), indent)
824+
val rootBlock = RootBlockWrapper(block, HtmlPolicy(settings, documentModel))
828825
val model = XmlFormattingModel(
829826
psiFile,
830827
rootBlock,

src/main/kotlin/com/emberjs/utils/EmberUtils.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import com.dmarcotte.handlebars.psi.impl.HbDataImpl
77
import com.dmarcotte.handlebars.psi.impl.HbPathImpl
88
import com.emberjs.cli.EmberCliFrameworkDetector
99
import com.emberjs.gts.GtsFileViewProvider
10-
import com.emberjs.hbs.*
10+
import com.emberjs.hbs.HbReference
11+
import com.emberjs.hbs.HbsLocalReference
12+
import com.emberjs.hbs.HbsModuleReference
13+
import com.emberjs.hbs.ImportNameReference
1114
import com.emberjs.index.EmberNameIndex
1215
import com.emberjs.navigation.EmberGotoRelatedProvider
1316
import com.emberjs.psi.EmberNamedElement
@@ -519,7 +522,7 @@ class EmberUtils {
519522
}
520523

521524
fun handleEmberHelpers(element: PsiElement?): PsiElement? {
522-
if (element is PsiElement && element.text.contains(Regex("^(\\(|\\{\\{)component\\b"))) {
525+
if (element is PsiElement && element.text?.contains(Regex("^(\\(|\\{\\{)component\\b")) == true) {
523526
val idx = element.children.indexOfFirst { it.text == "component" }
524527
val param = element.children.get(idx + 1)
525528
if (param.children.firstOrNull()?.children?.firstOrNull() is HbStringLiteral) {

0 commit comments

Comments
 (0)