addressed CR feedback, added comments, dropped unused code

This commit is contained in:
Vladimir Matveev 2014-11-10 13:30:00 -08:00
parent 89dee07bf2
commit 8960ab9712
4 changed files with 43 additions and 37 deletions

View file

@ -1124,7 +1124,15 @@ module ts {
messageText: string;
category: DiagnosticCategory;
code: number;
/**
* Early error - any error (can be produced at parsing\binding\typechecking step) that blocks emit
*/
isEarly?: boolean;
/**
* Parse error - error produced by parser when it scanner returns a token
* that parser does not understand in its current state
* (as opposed to grammar error when parser can interpret the token but interpretation is not legal from the grammar perespective)
*/
isParseError?: boolean;
}

View file

@ -26,13 +26,24 @@ module ts.formatting {
* { var x;
* }
* Normally indentation is applied only to the first token in line so at glance 'var' should not be touched.
* However if some format rule removes new line between ')' and '{' 'var' will become
* However if some format rule adds new line between '}' and 'var' 'var' will become
* the first token in line so it should be indented
*/
interface DynamicIndentation {
getIndentationForToken(tokenLine: number, tokenKind: SyntaxKind): number;
getIndentationForComment(owningToken: SyntaxKind): number;
/**
* Indentation for open and close tokens of the node if it is block or another node that needs special indentation
* ... {
* .........<child>
* ....}
* ____ - indentation
* ____ - delta
**/
getIndentation(): number;
/**
* Prefered relative indentation for child nodes
*/
getDelta(): number;
recomputeIndentation(lineAddedByFormatting: boolean): void;
}
@ -99,6 +110,14 @@ module ts.formatting {
}
// walk up and search for the parent node that ends at the same position with precedingToken.
// for cases like this
//
// var x = 1;
// while (true) {
// }
// after typing close curly in while statement we want to reformat just the while statement.
// However if we just walk upwards searching for the parent that has the same end value -
// we'll end up with the whole source file. isListElement allows to stop on the list element level
var current = precedingToken;
while (current &&
current.parent &&
@ -138,7 +157,14 @@ module ts.formatting {
function find(n: Node): Node {
var candidate = forEachChild(n, c => startEndContainsRange(c.getStart(sourceFile), c.end, range) && c);
return (candidate && find(candidate)) || n;
if (candidate) {
var result = find(candidate);
if (result) {
return result;
}
}
return n;
}
}
@ -230,9 +256,11 @@ module ts.formatting {
// local functions
/** Tries to compute the indentation for a list element.
* If list element is not in range then function will pick its actual indentation
* If list element is not in range then
* function will pick its actual indentation
* so it can be pushed downstream as inherited indentation.
* If list element is in the range - its indentation will be equal to inherited indentation from its predecessors.
* If list element is in the range - its indentation will be equal
* to inherited indentation from its predecessors.
*/
function tryComputeIndentationForListItem(startPos: number,
endPos: number,
@ -440,8 +468,7 @@ module ts.formatting {
var childStartPos = child.getStart(sourceFile);
var childStart = sourceFile.getLineAndCharacterFromPosition(childStartPos);
var childIndentationAmount =
isListItem
var childIndentationAmount = isListItem
? tryComputeIndentationForListItem(childStartPos, child.end, parentStartLine, originalRange, inheritedIndentation)
: Constants.Unknown;

View file

@ -959,15 +959,6 @@ module ts {
ConvertTabsToSpaces: boolean;
}
export function copyEditorOptions(o: EditorOptions): EditorOptions {
return {
IndentSize: o.IndentSize,
TabSize: o.TabSize,
NewLineCharacter: o.NewLineCharacter,
ConvertTabsToSpaces: o.ConvertTabsToSpaces
};
}
export interface FormatCodeOptions extends EditorOptions {
InsertSpaceAfterCommaDelimiter: boolean;
InsertSpaceAfterSemicolonInForStatements: boolean;
@ -979,23 +970,6 @@ module ts {
PlaceOpenBraceOnNewLineForControlBlocks: boolean;
}
export function copyFormatCodeOptions(o: FormatCodeOptions): FormatCodeOptions {
return {
IndentSize: o.IndentSize,
TabSize: o.TabSize,
NewLineCharacter: o.NewLineCharacter,
ConvertTabsToSpaces: o.ConvertTabsToSpaces,
InsertSpaceAfterCommaDelimiter: o.InsertSpaceAfterCommaDelimiter,
InsertSpaceAfterSemicolonInForStatements: o.InsertSpaceAfterSemicolonInForStatements,
InsertSpaceBeforeAndAfterBinaryOperators: o.InsertSpaceBeforeAndAfterBinaryOperators,
InsertSpaceAfterKeywordsInControlFlowStatements: o.InsertSpaceAfterKeywordsInControlFlowStatements,
InsertSpaceAfterFunctionKeywordForAnonymousFunctions: o.InsertSpaceAfterFunctionKeywordForAnonymousFunctions,
InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: o.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis,
PlaceOpenBraceOnNewLineForFunctions: o.PlaceOpenBraceOnNewLineForFunctions,
PlaceOpenBraceOnNewLineForControlBlocks: o.PlaceOpenBraceOnNewLineForControlBlocks
};
}
export interface DefinitionInfo {
fileName: string;
textSpan: TypeScript.TextSpan;
@ -5224,7 +5198,7 @@ module ts {
var start = new Date().getTime();
var result = formatting.SmartIndenter.getIndentation(position, sourceFile, copyEditorOptions(editorOptions));
var result = formatting.SmartIndenter.getIndentation(position, sourceFile, editorOptions);
host.log("getIndentationAtPosition: computeIndentation : " + (new Date().getTime() - start));
return result;
@ -5232,7 +5206,6 @@ module ts {
function getFormattingEditsForRange(fileName: string, start: number, end: number, options: FormatCodeOptions): TextChange[] {
fileName = switchToForwardSlashes(fileName);
var options = copyFormatCodeOptions(options);
var sourceFile = getCurrentSourceFile(fileName);
return formatting.formatSelection(start, end, sourceFile, getRuleProvider(options), options);
}
@ -5241,7 +5214,6 @@ module ts {
fileName = switchToForwardSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
var options = copyFormatCodeOptions(options)
return formatting.formatDocument(sourceFile, getRuleProvider(options), options);
}
@ -5249,7 +5221,6 @@ module ts {
fileName = switchToForwardSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
var options = copyFormatCodeOptions(options);
if (key === "}") {
return formatting.formatOnClosingCurly(position, sourceFile, getRuleProvider(options), options);

View file

@ -298,7 +298,7 @@ module ts.formatting {
return column;
}
export function nodeContentIsAlwaysIndented(kind: SyntaxKind): boolean {
function nodeContentIsAlwaysIndented(kind: SyntaxKind): boolean {
switch (kind) {
case SyntaxKind.ClassDeclaration:
case SyntaxKind.InterfaceDeclaration: