Skip to content

Commit 6671bfc

Browse files
committed
Add textlint's transformers
- Add markdown transformer - Add txt transformer
1 parent acb5dfb commit 6671bfc

File tree

4 files changed

+113
-30
lines changed

4 files changed

+113
-30
lines changed
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
export default function (context) {
2-
console.log(context);
3-
return {}
4-
}
2+
const {Syntax, RuleError, report, getSource} = context;
3+
return {
4+
[Syntax.Str](node){
5+
report(node, new Error("error"));
6+
}
7+
};
8+
}
Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,52 @@
11
import compileModule from '../../../utils/compileModule';
22
import pkg from 'textlint/package.json';
33

4-
const ID = 'textlint';
4+
const ID = 'textlint:markdown';
5+
6+
function formatResults(results, code) {
7+
const format = (message) => {
8+
return formatResult(message, code);
9+
};
10+
return results.messages.length === 0
11+
? 'Lint rule not fired.'
12+
: results.messages.map(format).join('').trim();
13+
}
14+
15+
function formatResult(result, code) {
16+
const pointer = '-'.repeat(result.column - 1) + '^';
17+
console.log(code.split('\n')[result.line - 1]);
18+
return `
19+
| ${result.message} (at ${result.line}:${result.column})
20+
${code.split('\n')[result.line - 1] || ''}
21+
| ${pointer}
22+
`;
23+
}
524

625
export default {
7-
id: ID,
8-
displayName: ID,
9-
version: pkg.version,
10-
homepage: pkg.homepage,
11-
12-
defaultParserID: 'textlint:markdown-to-ast',
13-
14-
loadTransformer(callback) {
15-
require(['textlint/lib/textlint-core', 'babel-core'], (TextLintCore, babel) => {
16-
callback({ TextLintCore, babel });
17-
})
18-
},
19-
20-
transform({TextLintCore, babel}, transformCode, code) {
21-
console.log(TextLintCore);
22-
const textlintCore = new TextLintCore();
23-
let rule = compileModule( // eslint-disable-line no-shadow
24-
babel.transform(transformCode).code
25-
);
26-
textlintCore.setupRules({
27-
'astExplorerRule': rule
28-
});
29-
return textlintCore.lintText(code, ".md").then(result => {
30-
return JSON.stringify(result);
31-
});
32-
}
26+
id: ID,
27+
displayName: ID,
28+
version: pkg.version,
29+
homepage: pkg.homepage,
30+
31+
defaultParserID: 'textlint:markdown-to-ast',
32+
33+
loadTransformer(callback) {
34+
require(['textlint/lib/textlint-core', 'babel-core'], (TextLintCore, babel) => {
35+
callback({TextLintCore, babel});
36+
})
37+
},
38+
39+
transform({TextLintCore, babel}, transformCode, code) {
40+
const textlintCore = new TextLintCore();
41+
let rule = compileModule( // eslint-disable-line no-shadow
42+
babel.transform(transformCode).code
43+
);
44+
textlintCore.setupRules({
45+
'astExplorerRule': rule,
46+
});
47+
return textlintCore.lintText(code, '.md').then(result => {
48+
return formatResults(result, code);
49+
});
50+
},
3351
};
52+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default function (context) {
2+
const {Syntax, RuleError, report, getSource} = context;
3+
return {
4+
[Syntax.Str](node){
5+
report(node, new Error("error"));
6+
}
7+
};
8+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import compileModule from '../../../utils/compileModule';
2+
import pkg from '../../../../../node_modules/textlint/package.json';
3+
4+
const ID = 'textlint:txt';
5+
6+
function formatResults(results, code) {
7+
const format = (message) => {
8+
return formatResult(message, code);
9+
};
10+
return results.messages.length === 0
11+
? 'Lint rule not fired.'
12+
: results.messages.map(format).join('').trim();
13+
}
14+
15+
function formatResult(result, code) {
16+
const pointer = '-'.repeat(result.column - 1) + '^';
17+
console.log(code.split('\n')[result.line - 1]);
18+
return `
19+
| ${result.message} (at ${result.line}:${result.column})
20+
${code.split('\n')[result.line - 1] || ''}
21+
| ${pointer}
22+
`;
23+
}
24+
25+
export default {
26+
id: ID,
27+
displayName: ID,
28+
version: pkg.version,
29+
homepage: pkg.homepage,
30+
31+
defaultParserID: 'textlint:txt-to-ast',
32+
33+
loadTransformer(callback) {
34+
require(['../../../../../node_modules/textlint/lib/textlint-core', 'babel-core'], (TextLintCore, babel) => {
35+
callback({TextLintCore, babel});
36+
})
37+
},
38+
39+
transform({TextLintCore, babel}, transformCode, code) {
40+
const textlintCore = new TextLintCore();
41+
let rule = compileModule( // eslint-disable-line no-shadow
42+
babel.transform(transformCode).code
43+
);
44+
textlintCore.setupRules({
45+
'astExplorerRule': rule,
46+
});
47+
return textlintCore.lintText(code, '.txt').then(result => {
48+
return formatResults(result, code);
49+
});
50+
},
51+
};
52+

0 commit comments

Comments
 (0)