Skip to content

Commit

Permalink
feat(tsfmt): refactor to es6 style
Browse files Browse the repository at this point in the history
  • Loading branch information
vvakame committed Sep 22, 2015
1 parent b058cdd commit 2941857
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 80 deletions.
44 changes: 22 additions & 22 deletions lib/cli.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
require("es6-promise").polyfill();

import fs = require("fs");
import commandpost = require("commandpost");
import path = require("path");
import * as fs from "fs";
import * as commandpost from "commandpost";
import * as path from "path";

import lib = require("./index");
import utils = require("./utils");
import * as lib from "./";
import {getConfigFileName} from "./utils";

var packageJson = JSON.parse(fs.readFileSync(__dirname + "/../package.json").toString());
let packageJson = JSON.parse(fs.readFileSync(__dirname + "/../package.json").toString());

interface RootOptions {
replace: boolean;
Expand All @@ -23,7 +23,7 @@ interface RootArguments {
files: string[];
}

var root = commandpost
let root = commandpost
.create<RootOptions, RootArguments>("tsfmt [files...]")
.version(packageJson.version, "-v, --version")
.option("-r, --replace", "replace .ts file")
Expand All @@ -34,17 +34,17 @@ var root = commandpost
.option("--no-tsfmt", "don't read a tsfmt.json")
.option("--verbose", "makes output more verbose")
.action((opts, args) => {
var replace = !!opts.replace;
var verify = !!opts.verify;
var stdin = !!opts.stdin;
var tslint = !!opts.tslint;
var editorconfig = !!opts.editorconfig;
var tsfmt = !!opts.tsfmt;

var files = args.files;
var useTsconfig = false;
let replace = !!opts.replace;
let verify = !!opts.verify;
let stdin = !!opts.stdin;
let tslint = !!opts.tslint;
let editorconfig = !!opts.editorconfig;
let tsfmt = !!opts.tsfmt;

let files = args.files;
let useTsconfig = false;
if (files.length === 0) {
var configFileName = utils.getConfigFileName(process.cwd(), "tsconfig.json");
let configFileName = getConfigFileName(process.cwd(), "tsconfig.json");
if (configFileName) {
files = readFilesFromTsconfig(configFileName);
useTsconfig = true;
Expand Down Expand Up @@ -80,7 +80,7 @@ var root = commandpost
tsfmt: tsfmt
})
.then(result => {
var resultMap: lib.ResultMap = {};
let resultMap: lib.ResultMap = {};
resultMap[result.fileName] = result;
return resultMap;
})
Expand All @@ -107,7 +107,7 @@ commandpost
function showResultHandler(resultMap: lib.ResultMap): Promise<any> {
"use strict";

var hasError = Object.keys(resultMap).filter(fileName => resultMap[fileName].error).length !== 0;
let hasError = Object.keys(resultMap).filter(fileName => resultMap[fileName].error).length !== 0;
if (hasError) {
Object.keys(resultMap)
.map(fileName => resultMap[fileName])
Expand Down Expand Up @@ -143,10 +143,10 @@ function errorHandler(err: any): Promise<any> {
function readFilesFromTsconfig(configPath: string) {
"use strict";

var tsconfigDir = path.dirname(configPath);
var tsconfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
let tsconfigDir = path.dirname(configPath);
let tsconfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
if (tsconfig.files) {
var files: string[] = tsconfig.files;
let files: string[] = tsconfig.files;
return files.map(filePath => path.resolve(tsconfigDir, filePath));
} else {
throw new Error(`No "files" section present in tsconfig.json`);
Expand Down
28 changes: 13 additions & 15 deletions lib/formatter.ts
Original file line number Diff line number Diff line change
@@ -1,46 +1,46 @@
"use strict";

import ts = require("typescript");
import utils = require("./utils");
import * as ts from "typescript";
import {createDefaultFormatCodeOptions} 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.
function format(fileName: string, text: string, options = utils.createDefaultFormatCodeOptions()) {
export default function format(fileName: string, text: string, options = createDefaultFormatCodeOptions()) {
"use strict";

// Parse the source text
var sourceFile = ts.createSourceFile(fileName, text, ts.ScriptTarget.Latest, (<any>/* backward compat for typescript-1.4.1 */"0"));
let sourceFile = ts.createSourceFile(fileName, text, ts.ScriptTarget.Latest, (<any>/* backward compat for typescript-1.4.1 */"0"));
fixupParentReferences(sourceFile);

// Get the formatting edits on the input sources
var edits = (<any>ts).formatting.formatDocument(sourceFile, getRuleProvider(options), options);
let edits = (<any>ts).formatting.formatDocument(sourceFile, getRuleProvider(options), options);

// Apply the edits on the input code
return applyEdits(text, edits);

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

function applyEdits(text: string, edits: ts.TextChange[]): string {
// Apply edits in reverse on the existing text
var result = text;
for (var i = edits.length - 1; i >= 0; i--) {
var change = edits[i];
var head: string;
let result = text;
for (let i = edits.length - 1; i >= 0; i--) {
let change = edits[i];
let head: string;
if (typeof change.span.start === "number") {
head = result.slice(0, change.span.start);
} else {
// backward compat for typescript-1.4.1
head = result.slice(0, (<any>change.span.start)());
}
var tail: string;
let tail: string;
if (typeof change.span.start === "number") {
tail = result.slice(change.span.start + change.span.length);
} else {
Expand All @@ -56,18 +56,16 @@ function format(fileName: string, text: string, options = utils.createDefaultFor
function fixupParentReferences(sourceFile: ts.SourceFile) {
"use strict";

var parent: ts.Node = sourceFile;
let parent: ts.Node = sourceFile;

function walk(n: ts.Node): void {
n.parent = parent;

var saveParent = parent;
let saveParent = parent;
parent = n;
ts.forEachChild(n, walk);
parent = saveParent;
}

ts.forEachChild(sourceFile, walk);
}

export = format;
42 changes: 21 additions & 21 deletions lib/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
"use strict";

import ts = require("typescript");
import formatter = require("./formatter");
import * as ts from "typescript";
import formatter from "./formatter";
import utils = require("./utils");

import fs = require("fs");
import * as fs from "fs";

import base = require("./provider/base");
import editorconfig = require("./provider/editorconfig");
import tslintjson = require("./provider/tslintjson");
import base from "./provider/base";
import editorconfig from "./provider/editorconfig";
import tslintjson from "./provider/tslintjson";

export interface Options {
dryRun?: boolean;
Expand Down Expand Up @@ -36,10 +36,10 @@ export interface Result {
export function processFiles(files: string[], opts: Options): Promise<ResultMap> {
"use strict";

var resultMap: ResultMap = {};
var promises = files.map(fileName => {
let resultMap: ResultMap = {};
let promises = files.map(fileName => {
if (!fs.existsSync(fileName)) {
var result: Result = {
let result: Result = {
fileName: fileName,
options: null,
message: `${fileName} is not exists. process abort.`,
Expand All @@ -50,7 +50,7 @@ export function processFiles(files: string[], opts: Options): Promise<ResultMap>
return Promise.resolve(result);
}

var content = fs.readFileSync(fileName).toString();
let content = fs.readFileSync(fileName).toString();
return processString(fileName, content, opts);
});
return Promise.all(promises).then(resultList=> {
Expand All @@ -66,8 +66,8 @@ export function processStream(fileName: string, input: NodeJS.ReadableStream, op

input.setEncoding("utf8");

var promise = new Promise<string>((resolve, reject) => {
var fragment = "";
let promise = new Promise<string>((resolve, reject) => {
let fragment = "";
input.on("data", (chunk: string) => {
fragment += chunk;
});
Expand All @@ -82,30 +82,30 @@ export function processStream(fileName: string, input: NodeJS.ReadableStream, op
export function processString(fileName: string, content: string, opts: Options): Promise<Result> {
"use strict";

var options = utils.createDefaultFormatCodeOptions();
var optGenPromises: (ts.FormatCodeOptions | Promise<ts.FormatCodeOptions>)[] = [];
let options = utils.createDefaultFormatCodeOptions();
let optGenPromises: (ts.FormatCodeOptions | Promise<ts.FormatCodeOptions>)[] = [];
if (opts.tsfmt) {
optGenPromises.push(base.makeFormatCodeOptions(fileName, options));
optGenPromises.push(base(fileName, options));
}
if (opts.editorconfig) {
optGenPromises.push(editorconfig.makeFormatCodeOptions(fileName, options));
optGenPromises.push(editorconfig(fileName, options));
}
if (opts.tslint) {
optGenPromises.push(tslintjson.makeFormatCodeOptions(fileName, options));
optGenPromises.push(tslintjson(fileName, options));
}

return Promise
.all(optGenPromises)
.then(() => {
var formattedCode = formatter(fileName, content, options);
let formattedCode = formatter(fileName, content, options);
if ((<any>formattedCode).trimRight) {
formattedCode = (<any>formattedCode).trimRight();
formattedCode += "\n";
}

// TODO replace newline code. NewLineCharacter params affect to only "new" newline. maybe.
var message: string;
var error = false;
let message: string;
let error = false;
if (opts && opts.verify) {
if (content !== formattedCode) {
message = `${fileName} is not formatted`;
Expand All @@ -120,7 +120,7 @@ export function processString(fileName: string, content: string, opts: Options):
message = formattedCode;
}

var result: Result = {
let result: Result = {
fileName: fileName,
options: options,
message: message,
Expand Down
12 changes: 6 additions & 6 deletions lib/provider/base.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
"use strict";

import ts = require("typescript");
import * as ts from "typescript";

import path = require("path");
import fs = require("fs");
import * as path from "path";
import * as fs from "fs";

import utils = require("../utils");
import {getConfigFileName} from "../utils";

interface TsfmtSettings {
// from FormatCodeOptions
Expand Down Expand Up @@ -33,10 +33,10 @@ interface TsfmtSettings {
convertTabsToSpaces?: boolean;
}

export function makeFormatCodeOptions(fileName: string, options: ts.FormatCodeOptions): ts.FormatCodeOptions {
export default function makeFormatCodeOptions(fileName: string, options: ts.FormatCodeOptions): ts.FormatCodeOptions {
"use strict";

var configFileName = utils.getConfigFileName(path.dirname(path.resolve(fileName)), "tsfmt.json");
var configFileName = getConfigFileName(path.dirname(path.resolve(fileName)), "tsfmt.json");
if (!configFileName) {
return options;
}
Expand Down
6 changes: 3 additions & 3 deletions lib/provider/editorconfig.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"use strict";

import ts = require("typescript");
import * as ts from "typescript";

import editorconfig = require("editorconfig");
import * as editorconfig from "editorconfig";

export function makeFormatCodeOptions(fileName: string, options: ts.FormatCodeOptions): Promise<ts.FormatCodeOptions> {
export default function makeFormatCodeOptions(fileName: string, options: ts.FormatCodeOptions): Promise<ts.FormatCodeOptions> {
"use strict";

return editorconfig
Expand Down
18 changes: 9 additions & 9 deletions lib/provider/tslintjson.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
"use strict";

import ts = require("typescript");
import * as ts from "typescript";

import path = require("path");
import fs = require("fs");
import * as path from "path";
import * as fs from "fs";

import utils = require("../utils");
import {getConfigFileName} from "../utils";

interface TslintSettings {
rules: {
Expand All @@ -25,26 +25,26 @@ interface TslintSettings {
};
}

export function makeFormatCodeOptions(fileName: string, options: ts.FormatCodeOptions): ts.FormatCodeOptions {
export default function makeFormatCodeOptions(fileName: string, options: ts.FormatCodeOptions): ts.FormatCodeOptions {
"use strict";

var configFileName = utils.getConfigFileName(path.dirname(path.resolve(fileName)), "tslint.json");
let configFileName = getConfigFileName(path.dirname(path.resolve(fileName)), "tslint.json");
if (!configFileName) {
return options;
}
// console.log("tslint makeFormatCodeOptions");
// console.log("read " + configFileName);

var config: TslintSettings = JSON.parse(<any>fs.readFileSync(configFileName, "utf-8"));
let config: TslintSettings = JSON.parse(<any>fs.readFileSync(configFileName, "utf-8"));
if (!config.rules) {
return options;
}
if (config.rules.indent && config.rules.indent[0]) {
options.IndentSize = config.rules.indent[1];
}
if (config.rules.whitespace && config.rules.whitespace[0]) {
for (var p in config.rules.whitespace) {
var value = config.rules.whitespace[p];
for (let p in config.rules.whitespace) {
let value = config.rules.whitespace[p];
if (value === "check-branch") {
options.InsertSpaceAfterKeywordsInControlFlowStatements = true;
} else if (value === "check-decl") {
Expand Down
8 changes: 4 additions & 4 deletions lib/utils.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
"use strict";

import ts = require("typescript");
import * as ts from "typescript";

import fs = require("fs");
import path = require("path");
import * as fs from "fs";
import * as path from "path";

export function createDefaultFormatCodeOptions(): ts.FormatCodeOptions {
"use strict";
Expand All @@ -28,7 +28,7 @@ export function createDefaultFormatCodeOptions(): ts.FormatCodeOptions {
export function getConfigFileName(baseDir: string, configFileName: string): string {
"use strict";

var configFilePath = path.resolve(baseDir, configFileName);
let configFilePath = path.resolve(baseDir, configFileName);
if (fs.existsSync(configFilePath)) {
return configFilePath;
}
Expand Down

0 comments on commit 2941857

Please sign in to comment.