Skip to content

Commit 0104fc8

Browse files
authored
feat: use official reporter (#13)
* feat: use official reporter * refactor: fix linting * docs(readme): update notes
1 parent 94b3f23 commit 0104fc8

File tree

10 files changed

+96
-184
lines changed

10 files changed

+96
-184
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
tslint plugin for prettier formatting
1010

11-
**NOTE**: This project is modified from [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier), ported to TSLint.
11+
**NOTE**: This project uses official reporter from [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier).
1212

1313
[Changelog](https://github.com/ikatyang/tslint-plugin-prettier/blob/master/CHANGELOG.md)
1414

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@
1919
},
2020
"license": "MIT",
2121
"scripts": {
22-
"prepublish": "yarn run build -- --inlineSourceMap false",
22+
"prepublish": "yarn run link && yarn run build -- --inlineSourceMap false",
23+
"link": "ln -sf $PWD/types/* $PWD/node_modules/@types",
2324
"lint": "tslint -p ./tsconfig.json --type-check",
2425
"test": "tslint --test ./tests/*/*",
2526
"test-coverage": "nyc yarn run test",
2627
"build": "rm -rf ./rules && tsc -p tsconfig.build.json",
2728
"release": "standard-version"
2829
},
2930
"dependencies": {
30-
"fast-diff": "^1.1.1",
31+
"eslint-plugin-prettier": "^2.2.0",
3132
"tslib": "^1.7.1"
3233
},
3334
"devDependencies": {
34-
"@types/fast-diff": "1.1.0",
3535
"@types/node": "8.0.22",
3636
"@types/prettier": "1.5.0",
3737
"nyc": "11.1.0",

src/prettierRule.ts

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
import * as utils from 'eslint-plugin-prettier';
12
import * as prettier from 'prettier';
23
import * as tslint from 'tslint';
34
import * as ts from 'typescript';
4-
import { report_differences } from './utils/report-differences';
55

6-
// tslint:disable:max-classes-per-file no-use-before-declare
6+
// tslint:disable:max-classes-per-file no-use-before-declare restrict-plus-operands
77

88
export class Rule extends tslint.Rules.AbstractRule {
99
public apply(source_file: ts.SourceFile): tslint.RuleFailure[] {
@@ -22,8 +22,52 @@ class Walker extends tslint.AbstractWalker<prettier.Options> {
2222
public walk(source_file: ts.SourceFile) {
2323
const source = source_file.getFullText();
2424
const formatted = prettier.format(source, this.options);
25-
if (source !== formatted) {
26-
report_differences(this, formatted);
25+
26+
if (source === formatted) {
27+
return;
2728
}
29+
30+
utils.generateDifferences(source, formatted).forEach(difference => {
31+
const {
32+
operation,
33+
offset: start,
34+
deleteText: delete_text = '',
35+
insertText: insert_text = '',
36+
} = difference;
37+
38+
const end = start + delete_text.length;
39+
const delete_code = utils.showInvisibles(delete_text);
40+
const insert_code = utils.showInvisibles(insert_text);
41+
42+
switch (operation) {
43+
case utils.DifferenceOperation.Insert:
44+
this.addFailureAt(
45+
start,
46+
1,
47+
`Insert \`${insert_code}\``,
48+
tslint.Replacement.appendText(start, insert_text),
49+
);
50+
break;
51+
case utils.DifferenceOperation.Delete:
52+
this.addFailure(
53+
start,
54+
end,
55+
`Delete \`${delete_code}\``,
56+
tslint.Replacement.deleteFromTo(start, end),
57+
);
58+
break;
59+
case utils.DifferenceOperation.Replace:
60+
this.addFailure(
61+
start,
62+
end,
63+
`Replace \`${delete_code}\` with \`${insert_code}\``,
64+
tslint.Replacement.replaceFromTo(start, end, insert_text),
65+
);
66+
break;
67+
// istanbul ignore next
68+
default:
69+
throw new Error(`Unexpected operation '${operation}'`);
70+
}
71+
});
2872
}
2973
}

src/utils/report-delete.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/utils/report-differences.ts

Lines changed: 0 additions & 86 deletions
This file was deleted.

src/utils/report-insert.ts

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/utils/report-replace.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/utils/show-invisibles.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Type definitions for eslint-plugin-prettier 2.2
2+
// Project: https://github.com/prettier/eslint-plugin-prettier
3+
// Definitions by: Ika <https://github.com/ikatyang>
4+
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5+
6+
/**
7+
* Converts invisible characters to a commonly recognizable visible form.
8+
* @param str The string with invisibles to convert.
9+
*/
10+
export function showInvisibles(str: string): string;
11+
12+
/**
13+
* Generate results for differences between source code and formatted version.
14+
* @param source The original source.
15+
* @param formatted The formatted source.
16+
*/
17+
export function generateDifferences(
18+
source: string,
19+
formatted: string,
20+
): Difference[];
21+
22+
export interface Difference {
23+
operation: DifferenceOperation;
24+
offset: number;
25+
insertText?: string;
26+
deleteText?: string;
27+
}
28+
29+
export const enum DifferenceOperation {
30+
Insert = 'insert',
31+
Delete = 'delete',
32+
Replace = 'replace',
33+
}

yarn.lock

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
version "6.25.1"
77
resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-6.25.1.tgz#ce8f126a4403e11e1b0033a424f11638afac7889"
88

9-
10-
version "1.1.0"
11-
resolved "https://registry.yarnpkg.com/@types/fast-diff/-/fast-diff-1.1.0.tgz#68c7f476025740b0b6756e51e38b1188dd528b0e"
12-
139
1410
version "8.0.22"
1511
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.22.tgz#9c6bfee1f45f5e9952ff6b487e657ecca48c7777"
@@ -532,6 +528,13 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
532528
version "1.0.5"
533529
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
534530

531+
eslint-plugin-prettier@^2.2.0:
532+
version "2.2.0"
533+
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.2.0.tgz#f2837ad063903d73c621e7188fb3d41486434088"
534+
dependencies:
535+
fast-diff "^1.1.1"
536+
jest-docblock "^20.0.1"
537+
535538
esutils@^1.1.6:
536539
version "1.1.6"
537540
resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375"
@@ -951,6 +954,10 @@ istanbul-reports@^1.1.1:
951954
dependencies:
952955
handlebars "^4.0.3"
953956

957+
jest-docblock@^20.0.1:
958+
version "20.0.3"
959+
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712"
960+
954961
js-tokens@^3.0.0:
955962
version "3.0.2"
956963
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"

0 commit comments

Comments
 (0)