fix a few issues in rules

This commit is contained in:
Vladimir Matveev 2014-10-15 14:54:49 -07:00
parent 27cb5b0c18
commit c0466b636f
5 changed files with 41 additions and 28 deletions

View File

@ -231,7 +231,11 @@ module ts {
FirstToken = EndOfFileToken,
LastToken = StringKeyword,
FirstTriviaToken = SingleLineCommentTrivia,
LastTriviaToken = WhitespaceTrivia
LastTriviaToken = WhitespaceTrivia,
FirstOperator = SemicolonToken,
LastOperator = CaretEqualsToken,
FirstBinaryOperator = LessThanToken,
LastBinaryOperator = CaretEqualsToken
}
export enum NodeFlags {

View File

@ -189,7 +189,7 @@ module ts.formatting {
var previousParent: Node;
var previousRangeStartLine: number;
var lastTriviaWasNewLine = false;
var lastTriviaWasNewLine = true;
var edits: TextChange[] = [];
// advance the scaner
@ -208,7 +208,7 @@ module ts.formatting {
return;
}
if (!rangeContainsRange(node, currentTokenInfo)) {
if (!rangeContainsRange(node, currentTokenInfo.token)) {
// node and its descendents don't contain current token from the scanner - skip it
return;
}
@ -351,14 +351,31 @@ module ts.formatting {
processTrivia(currentTokenInfo.leadingTrivia, parent, contextNode, indentation);
}
var indentToken: boolean;
if (rangeContainsRange(originalRange, currentTokenInfo.token)) {
processRange(currentTokenInfo.token, parent, contextNode, indentation);
indentToken = processRange(currentTokenInfo.token, parent, contextNode, indentation);
}
if (currentTokenInfo.trailingTrivia) {
processTrivia(currentTokenInfo.trailingTrivia, parent, contextNode, indentation);
}
if (lastTriviaWasNewLine && indentToken) {
// TODO: remove
var tokenRange = getNonAdjustedLineAndCharacterFromPosition(currentTokenInfo.token.pos, sourceFile);
// TODO: handle indentation in multiline comments
var currentIndentation = tokenRange.character;
if (indentation !== currentIndentation) {
var indentationString = getIndentationString(indentation, options);
var startLinePosition = getStartPositionOfLine(tokenRange.line, sourceFile);
recordReplace(startLinePosition, currentIndentation, indentationString);
}
}
return fetchNextTokenInfo();
}
@ -371,10 +388,11 @@ module ts.formatting {
}
}
function processRange(range: TextRangeWithKind, parent: Node, contextNode: Node, indentation: number) {
function processRange(range: TextRangeWithKind, parent: Node, contextNode: Node, indentation: number): boolean {
var rangeStart = getNonAdjustedLineAndCharacterFromPosition(range.pos, sourceFile);
if (rangeContainsRange(originalRange, range)) {
var indentToken = true;
var indentToken = true;
if (rangeContainsRange(originalRange, range)) {
if (!previousRange) {
var originalStart = getNonAdjustedLineAndCharacterFromPosition(originalRange.pos, sourceFile);
// TODO: implement
@ -389,23 +407,12 @@ module ts.formatting {
processPair(range, rangeStart.line, parent, previousRange, previousRangeStartLine, previousParent, contextNode)
indentToken = rangeStart.line !== previousRangeStartLine;
}
if (lastTriviaWasNewLine && indentToken) {
// TODO: handle indentation in multiline comments
if (!isTrivia(range.kind)) {
var currentIndentation = rangeStart.character;
if (indentation !== currentIndentation) {
var indentationString = getIndentationString(indentation, options);
var startLinePosition = getStartPositionOfLine(rangeStart.line, sourceFile);
recordReplace(startLinePosition, currentIndentation, indentationString);
}
}
}
}
previousRange = range;
previousParent = parent;
previousRangeStartLine = rangeStart.line;
return indentToken;
}
function processPair(currentItem: TextRangeWithKind,

View File

@ -448,6 +448,7 @@ module ts.formatting {
switch (context.contextNode.kind) {
case SyntaxKind.BinaryExpression:
case SyntaxKind.ConditionalExpression:
return true;
//// binary expressions
//case SyntaxKind.AssignmentExpression:
@ -492,8 +493,10 @@ module ts.formatting {
case SyntaxKind.ImportDeclaration:
// equal in var a = 0;
case SyntaxKind.VariableDeclaration:
// TODO:
//case SyntaxKind.EqualsValueClause:
// equal in p = 0;
case SyntaxKind.Parameter:
case SyntaxKind.EnumMember:
case SyntaxKind.Property:
return context.currentTokenSpan.kind === SyntaxKind.EqualsToken || context.nextTokenSpan.kind === SyntaxKind.EqualsToken;
// "in" keyword in for (var x in []) { }
case SyntaxKind.ForInStatement:
@ -704,8 +707,7 @@ module ts.formatting {
}
static IsVoidOpContext(context: FormattingContext): boolean {
return;
//return context.currentTokenSpan.token.kind === SyntaxKind.VoidKeyword && context.currentTokenParent.kind() === SyntaxKind.VoidExpression;
return context.currentTokenSpan.kind === SyntaxKind.VoidKeyword && context.currentTokenParent.kind === SyntaxKind.PrefixOperator;
}
}
}

View File

@ -135,8 +135,8 @@ module ts.formatting {
static Any: TokenRange = TokenRange.AllTokens();
static AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([SyntaxKind.MultiLineCommentTrivia]));
static Keywords = TokenRange.FromRange(SyntaxKind.FirstKeyword, SyntaxKind.LastKeyword);
static Operators = TokenRange.FromRange(SyntaxKind.SemicolonToken, SyntaxKind.SlashEqualsToken);
static BinaryOperators = TokenRange.FromRange(SyntaxKind.LessThanToken, SyntaxKind.SlashEqualsToken);
static Operators = TokenRange.FromRange(SyntaxKind.FirstOperator, SyntaxKind.LastOperator);
static BinaryOperators = TokenRange.FromRange(SyntaxKind.FirstBinaryOperator, SyntaxKind.LastBinaryOperator);
static BinaryKeywordOperators = TokenRange.FromTokens([SyntaxKind.InKeyword, SyntaxKind.InstanceOfKeyword]);
static ReservedKeywords = TokenRange.FromRange(SyntaxKind.FirstFutureReservedWord, SyntaxKind.LastFutureReservedWord);
static UnaryPrefixOperators = TokenRange.FromTokens([SyntaxKind.PlusPlusToken, SyntaxKind.MinusMinusToken, SyntaxKind.TildeToken, SyntaxKind.ExclamationToken]);

View File

@ -4,7 +4,7 @@
//// export enum NodeType {/*2*/
//// Error,/*3*/
//// Comment,/*4*/
//// } /*5*/
//// } /*5*/
//// export enum foob/*6*/
//// {
//// Blah=1, Bleah=2/*7*/
@ -25,7 +25,7 @@ verify.currentLineContentIs(" }");
goTo.marker("6");
verify.currentLineContentIs(" export enum foob {");
goTo.marker("7");
verify.currentLineContentIs(" Blah= 1, Bleah= 2");
verify.currentLineContentIs(" Blah = 1, Bleah = 2");
goTo.marker("8");
verify.currentLineContentIs(" }");
goTo.marker("9");