Skip to content

Commit 707d8b2

Browse files
committed
Merge branch 'newline_and_indent_fixes' of https://github.com/myitcv/typescript-formatter into myitcv-newline_and_indent_fixes
2 parents 5581713 + bb05b98 commit 707d8b2

File tree

5 files changed

+48
-13
lines changed

5 files changed

+48
-13
lines changed

lib/cli.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,14 @@ function showResultHandler(resultMap: lib.ResultMap): Promise<any> {
124124
Object.keys(resultMap)
125125
.map(fileName => resultMap[fileName])
126126
.filter(result => result.error)
127-
.forEach(result => console.error(result.message));
127+
.forEach(result => process.stderr.write(result.message));
128128
process.exit(1);
129129
} else {
130130
Object.keys(resultMap)
131131
.map(fileName => resultMap[fileName])
132132
.forEach(result => {
133133
if (result.message) {
134-
console.log(result.message);
134+
process.stdout.write(result.message);
135135
}
136136
});
137137
}

lib/index.ts

+19-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import * as ts from "typescript";
44
import formatter from "./formatter";
5-
import {createDefaultFormatCodeOptions} from "./utils";
5+
import {createDefaultFormatCodeOptions, createDefaultAdditionalFormatCodeOptions} from "./utils";
66

77
import * as fs from "fs";
88

@@ -34,6 +34,11 @@ export interface Result {
3434
dest: string;
3535
}
3636

37+
export interface AdditionalFormatOptions {
38+
noConsecutiveBlankLines: boolean;
39+
noTrailingWhitespace: boolean;
40+
}
41+
3742
export function processFiles(files: string[], opts: Options): Promise<ResultMap> {
3843
"use strict";
3944

@@ -43,7 +48,7 @@ export function processFiles(files: string[], opts: Options): Promise<ResultMap>
4348
let result: Result = {
4449
fileName: fileName,
4550
options: null,
46-
message: `${fileName} is not exists. process abort.`,
51+
message: `${fileName} does not exist. process abort.\n`,
4752
error: true,
4853
src: "",
4954
dest: ""
@@ -84,6 +89,7 @@ export function processString(fileName: string, content: string, opts: Options):
8489
"use strict";
8590

8691
let formatOptions = createDefaultFormatCodeOptions();
92+
let additionalOptions = createDefaultAdditionalFormatCodeOptions();
8793
let optGenPromises: (ts.FormatCodeOptions | Promise<ts.FormatCodeOptions>)[] = [];
8894
if (opts.tsfmt) {
8995
optGenPromises.push(base(fileName, opts, formatOptions));
@@ -92,7 +98,7 @@ export function processString(fileName: string, content: string, opts: Options):
9298
optGenPromises.push(editorconfig(fileName, opts, formatOptions));
9399
}
94100
if (opts.tslint) {
95-
optGenPromises.push(tslintjson(fileName, opts, formatOptions));
101+
optGenPromises.push(tslintjson(fileName, opts, formatOptions, additionalOptions));
96102
}
97103

98104
return Promise
@@ -104,18 +110,26 @@ export function processString(fileName: string, content: string, opts: Options):
104110
formattedCode += "\n";
105111
}
106112

113+
if (additionalOptions.noTrailingWhitespace) {
114+
formattedCode = formattedCode.replace(/^\s+$/mg, "");
115+
}
116+
117+
if (additionalOptions.noConsecutiveBlankLines) {
118+
formattedCode = formattedCode.replace(/\n\n^$/mg, "");
119+
}
120+
107121
// TODO replace newline code. NewLineCharacter params affect to only "new" newline. maybe.
108122
let message: string;
109123
let error = false;
110124
if (opts && opts.verify) {
111125
if (content !== formattedCode) {
112-
message = `${fileName} is not formatted`;
126+
message = `${fileName} is not formatted\n`;
113127
error = true;
114128
}
115129
} else if (opts && opts.replace) {
116130
if (content !== formattedCode) {
117131
fs.writeFileSync(fileName, formattedCode);
118-
message = `replaced ${fileName}`;
132+
message = `replaced ${fileName}\n`;
119133
}
120134
} else if (opts && !opts.dryRun) {
121135
message = formattedCode;

lib/provider/tslintjson.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@ import * as ts from "typescript";
55
import * as path from "path";
66
import * as fs from "fs";
77

8-
import {Options} from "../";
8+
import {Options, AdditionalFormatOptions} from "../";
99
import {getConfigFileName} from "../utils";
1010

1111
interface TslintSettings {
1212
rules: {
1313
indent: {
1414
0: boolean;
15-
1: number;
15+
1: string;
1616
};
17+
"no-consecutive-blank-lines": boolean,
18+
"no-trailing-whitespace": boolean,
1719
whitespace: {
1820
0: boolean;
1921
1: string;
@@ -26,7 +28,7 @@ interface TslintSettings {
2628
};
2729
}
2830

29-
export default function makeFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions): ts.FormatCodeOptions {
31+
export default function makeFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions, additionalOptions: AdditionalFormatOptions): ts.FormatCodeOptions {
3032
"use strict";
3133

3234
let baseDir = opts.baseDir ? path.resolve(opts.baseDir) : path.dirname(path.resolve(fileName));
@@ -42,8 +44,8 @@ export default function makeFormatCodeOptions(fileName: string, opts: Options, f
4244
if (!config.rules) {
4345
return formatOptions;
4446
}
45-
if (config.rules.indent && config.rules.indent[0]) {
46-
formatOptions.IndentSize = config.rules.indent[1];
47+
if (config.rules.indent && config.rules.indent[0] && config.rules.indent[1] === "spaces") {
48+
formatOptions.ConvertTabsToSpaces = true;
4749
}
4850
if (config.rules.whitespace && config.rules.whitespace[0]) {
4951
for (let p in config.rules.whitespace) {
@@ -63,5 +65,13 @@ export default function makeFormatCodeOptions(fileName: string, opts: Options, f
6365
}
6466
}
6567

68+
if (config.rules["no-consecutive-blank-lines"] === true) {
69+
additionalOptions.noConsecutiveBlankLines = true;
70+
}
71+
72+
if (config.rules["no-trailing-whitespace"] === true) {
73+
additionalOptions.noTrailingWhitespace = true;
74+
}
75+
6676
return formatOptions;
6777
}

lib/utils.ts

+11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import * as ts from "typescript";
55
import * as fs from "fs";
66
import * as path from "path";
77

8+
import {AdditionalFormatOptions} from "./";
9+
810
export function createDefaultFormatCodeOptions(): ts.FormatCodeOptions {
911
"use strict";
1012

@@ -39,3 +41,12 @@ export function getConfigFileName(baseDir: string, configFileName: string): stri
3941

4042
return getConfigFileName(path.resolve(baseDir, "../"), configFileName);
4143
}
44+
45+
export function createDefaultAdditionalFormatCodeOptions(): AdditionalFormatOptions {
46+
"use strict";
47+
48+
return {
49+
noConsecutiveBlankLines: false,
50+
noTrailingWhitespace: false
51+
};
52+
}

test/indexSpec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ describe("tsfmt test", () => {
173173
})
174174
.then(resultMap => {
175175
assert(resultMap[fileName].error);
176-
assert(resultMap[fileName].message === "./test/fixture/tsfmt/a/main.ts is not formatted");
176+
assert(resultMap[fileName].message === "./test/fixture/tsfmt/a/main.ts is not formatted\n");
177177
});
178178
});
179179
});

0 commit comments

Comments
 (0)