1+ // LICENSE : MIT
2+ "use strict" ;
3+ const visit = require ( 'unist-util-visit' ) ;
4+ /**
5+ * Ignore node manager that manager ignored ranges.
6+ *
7+ */
8+ export default class IgnoreManger {
9+ constructor ( ) {
10+ /**
11+ * @type {[number,number][] }
12+ * @private
13+ */
14+ this . _ignoredRangeList = [ ]
15+ }
16+
17+ /**
18+ * |.......|
19+ * ^ ^
20+ * Ignored Range
21+ *
22+ * |........|
23+ * ^
24+ * index
25+ * @param {number } index
26+ * @returns {boolean }
27+ */
28+ isIgnoredIndex ( index ) {
29+ return this . _ignoredRangeList . some ( range => {
30+ const [ start , end ] = range ;
31+ return start <= index && index <= end ;
32+ } )
33+ }
34+
35+ /**
36+ * @param {[number, number] } aRange
37+ * @returns {boolean }
38+ */
39+ isIgnoredRange ( aRange ) {
40+ const index = aRange [ 0 ] ;
41+ return this . isIgnoredIndex ( index ) ;
42+ }
43+
44+ /**
45+ * @param {Object } node
46+ * @returns {boolean }
47+ */
48+ isIgnored ( node ) {
49+ const index = node . index ;
50+ return this . isIgnoredIndex ( index ) ;
51+ }
52+
53+ /**
54+ * add node to ignore range list
55+ * @param {Object } node
56+ */
57+ ignore ( node ) {
58+ this . ignoreRange ( node . range ) ;
59+ }
60+
61+ /**
62+ * add range to ignore range list
63+ * @param {[number, number] } range
64+ */
65+ ignoreRange ( range ) {
66+ this . _ignoredRangeList . push ( range ) ;
67+ }
68+
69+ /**
70+ * ignore children node of `node`,
71+ * if the children node has the type that is included in `ignoredNodeTypes`.
72+ * @param {Node } targetNode
73+ * @param {string[] } ignoredNodeTypes
74+ */
75+ ignoreChildrenByTypes ( targetNode , ignoredNodeTypes ) {
76+ visit ( targetNode , visitedNode => {
77+ if ( ignoredNodeTypes . indexOf ( visitedNode . type ) !== - 1 ) {
78+ this . ignore ( visitedNode ) ;
79+ }
80+ } ) ;
81+ }
82+ }
0 commit comments