Skip to content

Commit f4d8281

Browse files
authored
Merge pull request #4 from azu/refactor-use-ignoreNodeManager
refactor(rule): use IgnoreNodeManager
2 parents dc31b2c + b16b977 commit f4d8281

File tree

3 files changed

+39
-21
lines changed

3 files changed

+39
-21
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@
3636
],
3737
"devDependencies": {
3838
"babel-cli": "^6.5.1",
39-
"babel-plugin-add-module-exports": "^0.1.2",
39+
"babel-plugin-add-module-exports": "^0.2.1",
4040
"babel-preset-es2015": "^6.5.0",
4141
"babel-register": "^6.5.2",
4242
"mocha": "^2.4.5",
4343
"textlint": "^6.0.1",
4444
"textlint-tester": "^1.1.0"
4545
},
4646
"dependencies": {
47-
"rousseau": "^1.0.0",
4847
"object-assign": "^4.0.1",
49-
"textlint-rule-helper": "^1.1.5",
48+
"rousseau": "^1.0.0",
49+
"textlint-rule-helper": "^1.2.0",
5050
"textlint-util-to-string": "^1.2.0"
5151
}
5252
}

src/textlint-rule-rousseau.js

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// LICENSE : MIT
22
"use strict";
3-
const {RuleHelper} = require("textlint-rule-helper");
3+
import {RuleHelper, IgnoreNodeManger} from "textlint-rule-helper";
44
const StringSource = require("textlint-util-to-string").default;
55
const rousseau = require("rousseau");
66
const ObjectAssign = require("object-assign");
@@ -27,6 +27,7 @@ const mapNode = function (ast, mapFn) {
2727

2828
export default function textlintRousseau(context, options = defaultOptions) {
2929
const helper = new RuleHelper(context);
30+
const ignoreNodeManager = new IgnoreNodeManger();
3031
const {Syntax, RuleError, report, getSource} = context;
3132
const showLevels = options.showLevels || defaultOptions.showLevels;
3233
const ignoreTypes = options.ignoreTypes || defaultOptions.ignoreTypes;
@@ -83,6 +84,10 @@ export default function textlintRousseau(context, options = defaultOptions) {
8384
return;
8485
}
8586
const index = source.originalIndexFromIndex(result.index);
87+
// if already ignored, should not report
88+
if (ignoreNodeManager.isIgnoredIndex(index)) {
89+
return;
90+
}
8691
const suggestions = createSuggest(result.replacements);
8792
const ruleError = new RuleError(`${level}(${type}) ${result.message}${suggestions}`, {
8893
index
@@ -92,25 +97,15 @@ export default function textlintRousseau(context, options = defaultOptions) {
9297

9398
return {
9499
[Syntax.Paragraph](node){
100+
// ignore if wrapped node types
95101
if (helper.isChildNode(node, [Syntax.Link, Syntax.Image, Syntax.BlockQuote, Syntax.Emphasis])) {
96102
return;
97103
}
98-
const filteredNode = mapNode(node, (node) => {
99-
const index = ignoreInlineNodeTypes.indexOf(node.type);
100-
if (index === -1) {
101-
return node;
102-
}
103-
/*
104-
`xxx` => code
105-
*/
106-
return ObjectAssign({}, node, {
107-
value: node.type.toLocaleLowerCase()
108-
});
109-
});
110-
if (!filteredNode) {
111-
return;
112-
}
113-
const source = new StringSource(filteredNode);
104+
// ignore if contain child node types
105+
ignoreNodeManager.ignoreChildrenByTypes(node, ignoreInlineNodeTypes);
106+
// check
107+
108+
const source = new StringSource(node);
114109
const text = source.toString();
115110
const reportSourceError = (results) => {
116111
reportError(node, source, results);

test/textlint-rule-rousseau-test.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ tester.run("rousseau", rule, {
1313
"This is *pen*.",
1414
"This is **pen**.",
1515
"This is __pen__.",
16+
"`this` is pen.",
1617
{
1718
text: "this is pen.",
1819
options: {
@@ -59,6 +60,28 @@ A number of pen.`,
5960
column: 1
6061
}
6162
]
62-
}
63+
}, {
64+
text: `There are a pen.
65+
A number of pen.`,
66+
errors: [
67+
{
68+
message: `suggestion(simplicity) "A number of" has a simpler alternative\nSuggestions:\n=> Many, some`,
69+
line: 2,
70+
column: 1
71+
}
72+
]
73+
},
74+
{
75+
text: "this is `pen`.`this is pen code`",
76+
errors: [
77+
{
78+
message: `error(sentence:uppercase) sentence should start with an uppercase letter
79+
Suggestions:
80+
=> This`,
81+
line: 1,
82+
column: 1
83+
}
84+
]
85+
},
6386
]
6487
});

0 commit comments

Comments
 (0)