Skip to content

Commit

Permalink
feat(tsfmt): support TypeScript 2.0.6
Browse files Browse the repository at this point in the history
  • Loading branch information
vvakame committed Oct 27, 2016
1 parent b12d86c commit 26db3de
Show file tree
Hide file tree
Showing 35 changed files with 449 additions and 491 deletions.
8 changes: 4 additions & 4 deletions lib/formatter.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import * as ts from "typescript";
import { createDefaultFormatCodeOptions } from "./utils";
import { createDefaultFormatCodeSettings } from "./utils";

// from https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API#pretty-printer-using-the-ls-formatter

// Note: this uses ts.formatting which is part of the typescript 1.4 package but is not currently
// exposed in the public typescript.d.ts. The typings should be exposed in the next release.
export default function format(fileName: string, text: string, options = createDefaultFormatCodeOptions()) {
export default function format(fileName: string, text: string, options = createDefaultFormatCodeSettings()) {

// Parse the source text
let sourceFile = ts.createSourceFile(fileName, text, ts.ScriptTarget.Latest, true);
Expand All @@ -16,11 +16,11 @@ export default function format(fileName: string, text: string, options = createD
// Apply the edits on the input code
return applyEdits(text, edits);

function getRuleProvider(options: ts.FormatCodeOptions) {
function getRuleProvider(settings: ts.FormatCodeSettings) {
// Share this between multiple formatters using the same options.
// This represents the bulk of the space the formatter uses.
let ruleProvider = new (ts as any).formatting.RulesProvider();
ruleProvider.ensureUpToDate(options);
ruleProvider.ensureUpToDate(settings);
return ruleProvider;
}

Expand Down
46 changes: 23 additions & 23 deletions lib/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as ts from "typescript";
import formatter from "./formatter";
import { createDefaultFormatCodeOptions, parseJSON } from "./utils";
import { createDefaultFormatCodeSettings, parseJSON } from "./utils";

export { parseJSON };

Expand All @@ -24,11 +24,11 @@ export interface Options {
}

export interface OptionModifier {
(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions): ts.FormatCodeOptions | Promise<ts.FormatCodeOptions>;
(fileName: string, opts: Options, formatSettings: ts.FormatCodeSettings): ts.FormatCodeSettings | Promise<ts.FormatCodeSettings>;
}

export interface PostProcessor {
(fileName: string, formattedCode: string, opts: Options, formatOptions: ts.FormatCodeOptions): string | Promise<string>;
(fileName: string, formattedCode: string, opts: Options, formatSettings: ts.FormatCodeSettings): string | Promise<string>;
}

class Processor {
Expand All @@ -39,34 +39,34 @@ class Processor {
this.optionModifiers.push(modifier);
}

processFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions): Promise<ts.FormatCodeOptions> {
processFormatCodeOptions(fileName: string, opts: Options, formatSettings: ts.FormatCodeSettings): Promise<ts.FormatCodeSettings> {
let optionModifiers = [...this.optionModifiers];

let next = (formatOptions: ts.FormatCodeOptions): Promise<ts.FormatCodeOptions> => {
let next = (formatSettings: ts.FormatCodeSettings): Promise<ts.FormatCodeSettings> => {
if (optionModifiers.length === 0) {
return Promise.resolve(formatOptions);
return Promise.resolve(formatSettings);
}
let modifier = optionModifiers.shift()!;
let ret = modifier(fileName, opts, formatOptions);
return Promise.resolve(ret).then(formatOptions => next(formatOptions));
let modifier = optionModifiers.shift() !;
let ret = modifier(fileName, opts, formatSettings);
return Promise.resolve(ret).then(formatSettings => next(formatSettings));
};

return next(formatOptions);
return next(formatSettings);
}

addPostProcess(postProcessor: PostProcessor) {
this.postProcessors.push(postProcessor);
}

postProcess(fileName: string, formattedCode: string, opts: Options, formatOptions: ts.FormatCodeOptions): Promise<string> {
postProcess(fileName: string, formattedCode: string, opts: Options, formatSettings: ts.FormatCodeSettings): Promise<string> {
let postProcessors = [...this.postProcessors];

let next = (formattedCode: string): Promise<string> => {
if (postProcessors.length === 0) {
return Promise.resolve(formattedCode);
}
let processor = postProcessors.shift()!;
let ret = processor(fileName, formattedCode, opts, formatOptions);
let processor = postProcessors.shift() !;
let ret = processor(fileName, formattedCode, opts, formatSettings);
return Promise.resolve(ret).then(formattedCode => next(formattedCode));
};

Expand All @@ -80,7 +80,7 @@ export interface ResultMap {

export interface Result {
fileName: string;
options: ts.FormatCodeOptions | null;
settings: ts.FormatCodeSettings | null;
message: string;
error: boolean;
src: string;
Expand All @@ -94,7 +94,7 @@ export function processFiles(files: string[], opts: Options): Promise<ResultMap>
if (!fs.existsSync(fileName)) {
let result: Result = {
fileName: fileName,
options: null,
settings: null,
message: `${fileName} does not exist. process abort.\n`,
error: true,
src: "",
Expand Down Expand Up @@ -148,19 +148,19 @@ export function processString(fileName: string, content: string, opts: Options):
processor.addOptionModify(tslintjson);
processor.addPostProcess(tslintPostProcess);
}
processor.addPostProcess((_fileName: string, formattedCode: string, _opts: Options, formatOptions: ts.FormatCodeOptions) => {
processor.addPostProcess((_fileName: string, formattedCode: string, _opts: Options, formatSettings: ts.FormatCodeSettings) => {
// replace newline code. maybe NewLineCharacter params affect to only "new" newline by language service.
formattedCode = formattedCode.replace(/\r?\n/g, formatOptions.NewLineCharacter);
formattedCode = formattedCode.replace(/\r?\n/g, formatSettings.newLineCharacter || "\n");
return Promise.resolve(formattedCode);
});

let formatOptions = createDefaultFormatCodeOptions();
return processor.processFormatCodeOptions(fileName, opts, formatOptions)
.then(formatOptions => {
let formattedCode = formatter(fileName, content, formatOptions);
let formatSettings = createDefaultFormatCodeSettings();
return processor.processFormatCodeOptions(fileName, opts, formatSettings)
.then(formatSettings => {
let formattedCode = formatter(fileName, content, formatSettings);

// apply post process logic
return processor.postProcess(fileName, formattedCode, opts, formatOptions);
return processor.postProcess(fileName, formattedCode, opts, formatSettings);

}).then(formattedCode => {
let message = "";
Expand All @@ -181,7 +181,7 @@ export function processString(fileName: string, content: string, opts: Options):

let result: Result = {
fileName: fileName,
options: formatOptions,
settings: formatSettings,
message: message,
error: error,
src: content,
Expand Down
38 changes: 19 additions & 19 deletions lib/provider/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ interface TsfmtSettings {
convertTabsToSpaces?: boolean;
}

export default function makeFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions): ts.FormatCodeOptions {
export default function makeFormatCodeOptions(fileName: string, opts: Options, formatSettings: ts.FormatCodeSettings): ts.FormatCodeSettings {
let baseDir = opts.baseDir ? path.resolve(opts.baseDir) : path.dirname(path.resolve(fileName));
let configFileName = getConfigFileName(baseDir, "tsfmt.json");
if (!configFileName) {
return formatOptions;
return formatSettings;
}

if (opts.verbose) {
Expand All @@ -49,52 +49,52 @@ export default function makeFormatCodeOptions(fileName: string, opts: Options, f

let config: TsfmtSettings = parseJSON(fs.readFileSync(configFileName, "utf-8"));
if (typeof config.insertSpaceAfterCommaDelimiter === "boolean") {
formatOptions.InsertSpaceAfterCommaDelimiter = config.insertSpaceAfterCommaDelimiter;
formatSettings.insertSpaceAfterCommaDelimiter = config.insertSpaceAfterCommaDelimiter;
}
if (typeof config.insertSpaceAfterSemicolonInForStatements === "boolean") {
formatOptions.InsertSpaceAfterSemicolonInForStatements = config.insertSpaceAfterSemicolonInForStatements;
formatSettings.insertSpaceAfterSemicolonInForStatements = config.insertSpaceAfterSemicolonInForStatements;
}
if (typeof config.insertSpaceBeforeAndAfterBinaryOperators === "boolean") {
formatOptions.InsertSpaceBeforeAndAfterBinaryOperators = config.insertSpaceBeforeAndAfterBinaryOperators;
formatSettings.insertSpaceBeforeAndAfterBinaryOperators = config.insertSpaceBeforeAndAfterBinaryOperators;
}
if (typeof config.insertSpaceAfterKeywordsInControlFlowStatements === "boolean") {
formatOptions.InsertSpaceAfterKeywordsInControlFlowStatements = config.insertSpaceAfterKeywordsInControlFlowStatements;
formatSettings.insertSpaceAfterKeywordsInControlFlowStatements = config.insertSpaceAfterKeywordsInControlFlowStatements;
}
if (typeof config.insertSpaceAfterFunctionKeywordForAnonymousFunctions === "boolean") {
formatOptions.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = config.insertSpaceAfterFunctionKeywordForAnonymousFunctions;
formatSettings.insertSpaceAfterFunctionKeywordForAnonymousFunctions = config.insertSpaceAfterFunctionKeywordForAnonymousFunctions;
}
if (typeof config.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis === "boolean") {
formatOptions.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = config.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis;
formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = config.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis;
}
if (typeof config.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets === "boolean") {
formatOptions.InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets = config.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets;
formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets = config.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets;
}
if (typeof config.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces === "boolean") {
formatOptions.InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces = config.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces;
formatSettings.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces = config.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces;
}
if (typeof config.placeOpenBraceOnNewLineForFunctions === "boolean") {
formatOptions.PlaceOpenBraceOnNewLineForFunctions = config.placeOpenBraceOnNewLineForFunctions;
formatSettings.placeOpenBraceOnNewLineForFunctions = config.placeOpenBraceOnNewLineForFunctions;
}
if (typeof config.placeOpenBraceOnNewLineForControlBlocks === "boolean") {
formatOptions.PlaceOpenBraceOnNewLineForControlBlocks = config.placeOpenBraceOnNewLineForControlBlocks;
formatSettings.placeOpenBraceOnNewLineForControlBlocks = config.placeOpenBraceOnNewLineForControlBlocks;
}
if (typeof config.indentSize === "number") {
formatOptions.IndentSize = config.indentSize;
formatSettings.indentSize = config.indentSize;
}
if (typeof config.indentStyle === "number") {
formatOptions.IndentStyle = config.indentStyle as number;
formatSettings.indentStyle = config.indentStyle as number;
} else if (typeof config.indentStyle === "string") {
formatOptions.IndentStyle = (ts.IndentStyle as any)[config.indentStyle] as number;
formatSettings.indentStyle = (ts.IndentStyle as any)[config.indentStyle] as number;
}
if (typeof config.tabSize === "number") {
formatOptions.TabSize = config.tabSize;
formatSettings.tabSize = config.tabSize;
}
if (typeof config.newLineCharacter === "string") {
formatOptions.NewLineCharacter = config.newLineCharacter;
formatSettings.newLineCharacter = config.newLineCharacter;
}
if (typeof config.convertTabsToSpaces === "boolean") {
formatOptions.ConvertTabsToSpaces = config.convertTabsToSpaces;
formatSettings.convertTabsToSpaces = config.convertTabsToSpaces;
}

return formatOptions;
return formatSettings;
}
20 changes: 10 additions & 10 deletions lib/provider/editorconfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Options } from "../";

let emitBaseDirWarning = false;

export default function makeFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions): Promise<ts.FormatCodeOptions> {
export default function makeFormatCodeOptions(fileName: string, opts: Options, formatSettings: ts.FormatCodeSettings): Promise<ts.FormatCodeSettings> {

if (opts.verbose && opts.baseDir && !emitBaseDirWarning) {
console.log("editorconfig is not supported baseDir options");
Expand All @@ -17,35 +17,35 @@ export default function makeFormatCodeOptions(fileName: string, opts: Options, f
.parse(fileName)
.then(config => {
if (Object.keys(config).length === 0) {
return formatOptions;
return formatSettings;
}
if (opts.verbose) {
console.log("editorconfig: \n" + "file: " + fileName + "\n" + JSON.stringify(config, null, 2));
}

if (config.indent_style === "tab") {
formatOptions.ConvertTabsToSpaces = false;
formatSettings.convertTabsToSpaces = false;
// if (typeof config.tab_width === "number") {
// options.TabSize = config.tab_width;
// }
} else if (typeof config.indent_size === "number") {
formatOptions.ConvertTabsToSpaces = true;
formatOptions.IndentSize = config.indent_size;
formatSettings.convertTabsToSpaces = true;
formatSettings.indentSize = config.indent_size;
}
if (config.end_of_line === "lf") {
formatOptions.NewLineCharacter = "\n";
formatSettings.newLineCharacter = "\n";
} else if (config.end_of_line === "cr") {
formatOptions.NewLineCharacter = "\r";
formatSettings.newLineCharacter = "\r";
} else if (config.end_of_line === "crlf") {
formatOptions.NewLineCharacter = "\r\n";
formatSettings.newLineCharacter = "\r\n";
}

return formatOptions;
return formatSettings;
});
}


export function postProcess(fileName: string, formattedCode: string, opts: Options, _formatOptions: ts.FormatCodeOptions): Promise<string> {
export function postProcess(fileName: string, formattedCode: string, opts: Options, _formatSettings: ts.FormatCodeSettings): Promise<string> {

if (opts.verbose && opts.baseDir && !emitBaseDirWarning) {
console.log("editorconfig is not supported baseDir options");
Expand Down
12 changes: 6 additions & 6 deletions lib/provider/tsconfigjson.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,27 @@ interface TsconfigSettings {
};
}

export default function makeFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions): ts.FormatCodeOptions {
export default function makeFormatCodeOptions(fileName: string, opts: Options, formatSettings: ts.FormatCodeSettings): ts.FormatCodeSettings {

let baseDir = opts.baseDir ? path.resolve(opts.baseDir) : path.dirname(path.resolve(fileName));
let configFileName = getConfigFileName(baseDir, "tsconfig.json");
if (!configFileName) {
return formatOptions;
return formatSettings;
}
if (opts.verbose) {
console.log(`read ${configFileName} for ${fileName}`);
}

let config: TsconfigSettings = parseJSON(fs.readFileSync(configFileName, "utf-8"));
if (!config.compilerOptions || !config.compilerOptions.newLine) {
return formatOptions;
return formatSettings;
}

if (config.compilerOptions.newLine.toLowerCase() === "crlf") {
formatOptions.NewLineCharacter = "\r\n";
formatSettings.newLineCharacter = "\r\n";
} else if (config.compilerOptions.newLine.toLowerCase() === "lf") {
formatOptions.NewLineCharacter = "\n";
formatSettings.newLineCharacter = "\n";
}

return formatOptions;
return formatSettings;
}
Loading

0 comments on commit 26db3de

Please sign in to comment.