Net bracket depth of a fragment, ignoring brackets inside strings.
(s: string)
| 67 | |
| 68 | /** Net bracket depth of a fragment, ignoring brackets inside strings. */ |
| 69 | function bracketBalance(s: string): number { |
| 70 | let depth = 0; |
| 71 | let inString = false; |
| 72 | for (let i = 0; i < s.length; i++) { |
| 73 | const c = s[i]; |
| 74 | if (inString) { |
| 75 | if (c === '\\') i++; |
| 76 | else if (c === '"') inString = false; |
| 77 | } else if (c === '"') inString = true; |
| 78 | else if ('[({'.includes(c)) depth++; |
| 79 | else if ('])}'.includes(c)) depth--; |
| 80 | } |
| 81 | return depth; |
| 82 | } |
| 83 | |
| 84 | export function extractRules(filePath: string): ExtractResult { |
| 85 | const src = stripComments(readFileSync(filePath, 'utf8')); |