Skip to content

Commit 5b46e5d

Browse files
committed
refactor(tsfmt): move unique operation to custom provider side
1 parent 707d8b2 commit 5b46e5d

File tree

11 files changed

+118
-33
lines changed

11 files changed

+118
-33
lines changed

lib/index.ts

+12-16
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

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

77
import * as fs from "fs";
88

99
import base from "./provider/base";
1010
import editorconfig from "./provider/editorconfig";
11-
import tslintjson from "./provider/tslintjson";
11+
import tslintjson, {postProcess as tslintPostProcess} from "./provider/tslintjson";
1212

1313
export interface Options {
1414
dryRun?: boolean;
@@ -21,6 +21,10 @@ export interface Options {
2121
tsfmt: boolean;
2222
}
2323

24+
export interface PostProcess {
25+
(fileName: string, formattedCode: string, opts: Options, formatOptions: ts.FormatCodeOptions): string;
26+
}
27+
2428
export interface ResultMap {
2529
[fileName: string]: Result;
2630
}
@@ -34,11 +38,6 @@ export interface Result {
3438
dest: string;
3539
}
3640

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

@@ -89,16 +88,17 @@ export function processString(fileName: string, content: string, opts: Options):
8988
"use strict";
9089

9190
let formatOptions = createDefaultFormatCodeOptions();
92-
let additionalOptions = createDefaultAdditionalFormatCodeOptions();
9391
let optGenPromises: (ts.FormatCodeOptions | Promise<ts.FormatCodeOptions>)[] = [];
92+
let postProcesses: PostProcess[] = [];
9493
if (opts.tsfmt) {
9594
optGenPromises.push(base(fileName, opts, formatOptions));
9695
}
9796
if (opts.editorconfig) {
9897
optGenPromises.push(editorconfig(fileName, opts, formatOptions));
9998
}
10099
if (opts.tslint) {
101-
optGenPromises.push(tslintjson(fileName, opts, formatOptions, additionalOptions));
100+
optGenPromises.push(tslintjson(fileName, opts, formatOptions));
101+
postProcesses.push(tslintPostProcess);
102102
}
103103

104104
return Promise
@@ -110,13 +110,9 @@ export function processString(fileName: string, content: string, opts: Options):
110110
formattedCode += "\n";
111111
}
112112

113-
if (additionalOptions.noTrailingWhitespace) {
114-
formattedCode = formattedCode.replace(/^\s+$/mg, "");
115-
}
116-
117-
if (additionalOptions.noConsecutiveBlankLines) {
118-
formattedCode = formattedCode.replace(/\n\n^$/mg, "");
119-
}
113+
postProcesses.forEach(postProcess => {
114+
formattedCode = postProcess(fileName, formattedCode, opts, formatOptions) || formattedCode;
115+
});
120116

121117
// TODO replace newline code. NewLineCharacter params affect to only "new" newline. maybe.
122118
let message: string;

lib/provider/tslintjson.ts

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

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

1111
interface TslintSettings {
@@ -15,7 +15,6 @@ interface TslintSettings {
1515
1: string;
1616
};
1717
"no-consecutive-blank-lines": boolean,
18-
"no-trailing-whitespace": boolean,
1918
whitespace: {
2019
0: boolean;
2120
1: string;
@@ -28,7 +27,11 @@ interface TslintSettings {
2827
};
2928
}
3029

31-
export default function makeFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions, additionalOptions: AdditionalFormatOptions): ts.FormatCodeOptions {
30+
export interface AdditionalFormatOptions {
31+
noConsecutiveBlankLines: boolean;
32+
}
33+
34+
export default function makeFormatCodeOptions(fileName: string, opts: Options, formatOptions: ts.FormatCodeOptions): ts.FormatCodeOptions {
3235
"use strict";
3336

3437
let baseDir = opts.baseDir ? path.resolve(opts.baseDir) : path.dirname(path.resolve(fileName));
@@ -65,13 +68,39 @@ export default function makeFormatCodeOptions(fileName: string, opts: Options, f
6568
}
6669
}
6770

71+
return formatOptions;
72+
}
73+
74+
export function postProcess(fileName: string, formattedCode: string, opts: Options, formatOptions: ts.FormatCodeOptions): string {
75+
"use strict";
76+
77+
let baseDir = opts.baseDir ? path.resolve(opts.baseDir) : path.dirname(path.resolve(fileName));
78+
let configFileName = getConfigFileName(baseDir, "tslint.json");
79+
if (!configFileName) {
80+
return formattedCode;
81+
}
82+
83+
let config: TslintSettings = JSON.parse(<any>fs.readFileSync(configFileName, "utf-8"));
84+
if (!config.rules) {
85+
return formattedCode;
86+
}
87+
88+
let additionalOptions = createDefaultAdditionalFormatCodeOptions();
6889
if (config.rules["no-consecutive-blank-lines"] === true) {
6990
additionalOptions.noConsecutiveBlankLines = true;
7091
}
7192

72-
if (config.rules["no-trailing-whitespace"] === true) {
73-
additionalOptions.noTrailingWhitespace = true;
93+
if (additionalOptions.noConsecutiveBlankLines) {
94+
formattedCode = formattedCode.replace(/\n+^$/mg, "\n");
7495
}
7596

76-
return formatOptions;
97+
return formattedCode;
98+
}
99+
100+
function createDefaultAdditionalFormatCodeOptions(): AdditionalFormatOptions {
101+
"use strict";
102+
103+
return {
104+
noConsecutiveBlankLines: false
105+
};
77106
}

lib/utils.ts

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

8-
import {AdditionalFormatOptions} from "./";
9-
108
export function createDefaultFormatCodeOptions(): ts.FormatCodeOptions {
119
"use strict";
1210

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

4240
return getConfigFileName(path.resolve(baseDir, "../"), configFileName);
4341
}
44-
45-
export function createDefaultAdditionalFormatCodeOptions(): AdditionalFormatOptions {
46-
"use strict";
47-
48-
return {
49-
noConsecutiveBlankLines: false,
50-
noTrailingWhitespace: false
51-
};
52-
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"IndentSize": 4,
3+
"TabSize": 4,
4+
"NewLineCharacter": "\r\n",
5+
"ConvertTabsToSpaces": true,
6+
"InsertSpaceAfterCommaDelimiter": true,
7+
"InsertSpaceAfterSemicolonInForStatements": true,
8+
"InsertSpaceBeforeAndAfterBinaryOperators": true,
9+
"InsertSpaceAfterKeywordsInControlFlowStatements": true,
10+
"InsertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
11+
"InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,
12+
"InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false,
13+
"PlaceOpenBraceOnNewLineForFunctions": false,
14+
"PlaceOpenBraceOnNewLineForControlBlocks": false
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Sample {
2+
3+
test() {
4+
return "";
5+
}
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"IndentSize": 4,
3+
"TabSize": 4,
4+
"NewLineCharacter": "\r\n",
5+
"ConvertTabsToSpaces": true,
6+
"InsertSpaceAfterCommaDelimiter": true,
7+
"InsertSpaceAfterSemicolonInForStatements": true,
8+
"InsertSpaceBeforeAndAfterBinaryOperators": true,
9+
"InsertSpaceAfterKeywordsInControlFlowStatements": true,
10+
"InsertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
11+
"InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,
12+
"InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false,
13+
"PlaceOpenBraceOnNewLineForFunctions": false,
14+
"PlaceOpenBraceOnNewLineForControlBlocks": false
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Sample {
2+
test() {
3+
return "";
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Sample {
2+
3+
4+
5+
6+
test() {
7+
return "";
8+
}
9+
}
10+
11+
12+
13+
14+
15+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"rules": {
3+
"no-consecutive-blank-lines": true
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Sample {
2+
test() {
3+
return "";
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"rules": {
3+
"no-trailing-whitespace": true
4+
}
5+
}

0 commit comments

Comments
 (0)