11// LICENSE : MIT
22"use strict" ;
3- const { RuleHelper} = require ( "textlint-rule-helper" ) ;
4- const StringSource = require ( "textlint-util-to-string" ) . default ;
3+ import { RuleHelper , IgnoreNodeManger } from "textlint-rule-helper" ;
54const rousseau = require ( "rousseau" ) ;
65const ObjectAssign = require ( "object-assign" ) ;
76const defaultOptions = {
@@ -27,6 +26,7 @@ const mapNode = function (ast, mapFn) {
2726
2827export default function textlintRousseau ( context , options = defaultOptions ) {
2928 const helper = new RuleHelper ( context ) ;
29+ const ignoreNodeManager = new IgnoreNodeManger ( ) ;
3030 const { Syntax, RuleError, report, getSource} = context ;
3131 const showLevels = options . showLevels || defaultOptions . showLevels ;
3232 const ignoreTypes = options . ignoreTypes || defaultOptions . ignoreTypes ;
@@ -72,7 +72,7 @@ export default function textlintRousseau(context, options = defaultOptions) {
7272 return "=> " + value ;
7373 } ) . join ( "\n" ) ;
7474 } ;
75- const reportError = ( node , source , result ) => {
75+ const reportError = ( node , result ) => {
7676 const level = result . level ;
7777 const type = result . type ;
7878 // if not contains showing options, ignore this result
@@ -82,7 +82,11 @@ export default function textlintRousseau(context, options = defaultOptions) {
8282 if ( ! isShowType ( type ) ) {
8383 return ;
8484 }
85- const index = source . originalIndexFromIndex ( result . index ) ;
85+ const index = result . index ;
86+ // if already ignored, should not report
87+ if ( ignoreNodeManager . isIgnoredIndex ( index ) ) {
88+ return ;
89+ }
8690 const suggestions = createSuggest ( result . replacements ) ;
8791 const ruleError = new RuleError ( `${ level } (${ type } ) ${ result . message } ${ suggestions } ` , {
8892 index
@@ -92,28 +96,16 @@ export default function textlintRousseau(context, options = defaultOptions) {
9296
9397 return {
9498 [ Syntax . Paragraph ] ( node ) {
99+ // ignore if wrapped node types
95100 if ( helper . isChildNode ( node , [ Syntax . Link , Syntax . Image , Syntax . BlockQuote , Syntax . Emphasis ] ) ) {
96101 return ;
97102 }
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 ) ;
114- const text = source . toString ( ) ;
103+ // ignore if contain child node types
104+ ignoreNodeManager . ignoreChildrenByTypes ( node , ignoreInlineNodeTypes ) ;
105+ // check
106+ const text = getSource ( node ) ;
115107 const reportSourceError = ( results ) => {
116- reportError ( node , source , results ) ;
108+ reportError ( node , results ) ;
117109 } ;
118110 rousseau ( text , function ( err , results ) {
119111 if ( err ) {
0 commit comments