Skip to content

Commit a68a9f8

Browse files
committed
1 parent ee43c18 commit a68a9f8

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

Diff for: src/services/formatting/formattingContext.ts

+11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ namespace ts.formatting {
1212
private contextNodeAllOnSameLine: boolean;
1313
private nextNodeAllOnSameLine: boolean;
1414
private tokensAreOnSameLine: boolean;
15+
private spanBetweenTokensIsOnSingleLine: boolean;
1516
private contextNodeBlockIsOnOneLine: boolean;
1617
private nextNodeBlockIsOnOneLine: boolean;
1718

@@ -35,6 +36,7 @@ namespace ts.formatting {
3536
this.contextNodeAllOnSameLine = undefined;
3637
this.nextNodeAllOnSameLine = undefined;
3738
this.tokensAreOnSameLine = undefined;
39+
this.spanBetweenTokensIsOnSingleLine = undefined;
3840
this.contextNodeBlockIsOnOneLine = undefined;
3941
this.nextNodeBlockIsOnOneLine = undefined;
4042
}
@@ -65,6 +67,15 @@ namespace ts.formatting {
6567
return this.tokensAreOnSameLine;
6668
}
6769

70+
public SpanBetweenTokensIsOnSingleLine(): boolean {
71+
if (this.spanBetweenTokensIsOnSingleLine === undefined) {
72+
const startLine = this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.end).line;
73+
const endLine = this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line;
74+
this.spanBetweenTokensIsOnSingleLine = (startLine === endLine);
75+
}
76+
77+
return this.spanBetweenTokensIsOnSingleLine;
78+
}
6879
public ContextNodeBlockIsOnOneLine() {
6980
if (this.contextNodeBlockIsOnOneLine === undefined) {
7081
this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode);

Diff for: src/services/formatting/rules.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -471,10 +471,10 @@ namespace ts.formatting {
471471
this.NoSpaceBeforeCloseBracket = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.CloseBracketToken), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete));
472472

473473
// Insert space after opening and before closing template string braces
474-
this.NoSpaceAfterTemplateHeadAndMiddle = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.TemplateHead, SyntaxKind.TemplateMiddle]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete));
475-
this.SpaceAfterTemplateHeadAndMiddle = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.TemplateHead, SyntaxKind.TemplateMiddle]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxSameLineTokenContext), RuleAction.Space));
476-
this.NoSpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete));
477-
this.SpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxSameLineTokenContext), RuleAction.Space));
474+
this.NoSpaceAfterTemplateHeadAndMiddle = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.TemplateHead, SyntaxKind.TemplateMiddle]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxAndSpanBetweenIsSingleLineTokenContext), RuleAction.Delete));
475+
this.SpaceAfterTemplateHeadAndMiddle = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.TemplateHead, SyntaxKind.TemplateMiddle]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxAndSpanBetweenIsSingleLineTokenContext), RuleAction.Space));
476+
this.NoSpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxAndSpanBetweenIsSingleLineTokenContext), RuleAction.Delete));
477+
this.SpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), Rules.IsNonJsxAndSpanBetweenIsSingleLineTokenContext), RuleAction.Space));
478478

479479
// No space after { and before } in JSX expression
480480
this.NoSpaceAfterOpenBraceInJsxExpression = new Rule(RuleDescriptor.create3(SyntaxKind.OpenBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), Rules.IsNonJsxSameLineTokenContext, Rules.IsJsxExpressionContext), RuleAction.Delete));
@@ -820,6 +820,10 @@ namespace ts.formatting {
820820
return context.TokensAreOnSameLine() && context.contextNode.kind !== SyntaxKind.JsxText;
821821
}
822822

823+
static IsNonJsxAndSpanBetweenIsSingleLineTokenContext(context: FormattingContext): boolean {
824+
return context.SpanBetweenTokensIsOnSingleLine() && context.contextNode.kind !== SyntaxKind.JsxText;
825+
}
826+
823827
static IsNonJsxElementContext(context: FormattingContext): boolean {
824828
return context.contextNode.kind !== SyntaxKind.JsxElement;
825829
}

0 commit comments

Comments
 (0)