Skip to content

Commit b802138

Browse files
committed
Update: improve getTemplateBodyTokenStore
1 parent c4723d4 commit b802138

File tree

4 files changed

+35
-85
lines changed

4 files changed

+35
-85
lines changed

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as AST from "./ast"
88
import {LocationCalculator} from "./common/location-calculator"
99
import {HTMLParser, HTMLTokenizer} from "./html"
1010
import {parseScript, parseScriptElement} from "./script"
11-
import services from "./parser-services"
11+
import * as services from "./parser-services"
1212

1313
const STARTS_WITH_LT = /^\s*</
1414

@@ -78,7 +78,7 @@ export function parseForESLint(code: string, options: any): AST.ESLintExtendedPr
7878
: undefined
7979

8080
result.ast.templateBody = templateBody
81-
result.services = Object.assign(result.services || {}, services)
81+
result.services = Object.assign(result.services || {}, services.define(result.ast))
8282

8383
return result
8484
}

src/parser-services.ts

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* @copyright 2017 Toru Nagashima. All rights reserved.
44
* See LICENSE file in root directory for full license.
55
*/
6+
import assert from "assert"
67
import EventEmitter from "events"
78
import NodeEventGenerator from "eslint/lib/util/node-event-generator"
89
import TokenStore from "eslint/lib/token-store"
@@ -21,7 +22,7 @@ const stores = new WeakMap<object, TokenStore>()
2122
* @returns The emitter for this context.
2223
*/
2324
function ensureEmitter(context: any): EventEmitter {
24-
const ast = context.getSourceCode()
25+
const ast = context.getSourceCode().ast
2526
let emitter = emitters.get(ast)
2627

2728
if (!emitter) {
@@ -44,31 +45,38 @@ function ensureEmitter(context: any): EventEmitter {
4445
// Exports
4546
//------------------------------------------------------------------------------
4647

47-
export default {
48-
registerTemplateBodyVisitor(context: any, visitor: {[key: string]: Function}): void {
49-
const emitter = ensureEmitter(context)
48+
/**
49+
* Define the parser service
50+
* @param rootAST
51+
*/
52+
export function define(rootAST: ESLintProgram) {
53+
return {
54+
registerTemplateBodyVisitor(context: any, visitor: {[key: string]: Function}): void {
55+
assert(context.getSourceCode().ast === rootAST)
56+
const emitter = ensureEmitter(context)
5057

51-
for (const selector of Object.keys(visitor)) {
52-
emitter.on(selector, visitor[selector])
53-
}
54-
},
58+
for (const selector of Object.keys(visitor)) {
59+
emitter.on(selector, visitor[selector])
60+
}
61+
},
5562

56-
/**
57-
* Get the token store of the template body.
58-
* @param context The rule context to get.
59-
* @returns The token store of template body.
60-
*/
61-
getTemplateBodyTokenStore(context: any): TokenStore {
62-
const ast = context.getSourceCode().ast.templateBody
63-
let store = stores.get(ast)
63+
/**
64+
* Get the token store of the template body.
65+
* @returns The token store of template body.
66+
*/
67+
getTemplateBodyTokenStore(): TokenStore {
68+
const ast = rootAST.templateBody
69+
const key = ast || stores
70+
let store = stores.get(key)
6471

65-
if (!store) {
66-
store = (ast != null)
67-
? new TokenStore(ast.tokens, ast.comments)
68-
: new TokenStore([], [])
69-
stores.set(ast, store)
70-
}
72+
if (!store) {
73+
store = (ast != null)
74+
? new TokenStore(ast.tokens, ast.comments)
75+
: new TokenStore([], [])
76+
stores.set(key, store)
77+
}
7178

72-
return store
73-
},
79+
return store
80+
},
81+
}
7482
}

test/stub-rule-context.js

Lines changed: 0 additions & 56 deletions
This file was deleted.

test/tokens.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
const assert = require("assert")
1313
const parse = require("..").parseForESLint
14-
const RuleContext = require("./stub-rule-context")
1514

1615
//------------------------------------------------------------------------------
1716
// Helpers
@@ -54,9 +53,8 @@ describe("services.getTemplateBodyTokenStore", () => {
5453

5554
before(() => {
5655
const result = parse(code, Object.assign({filePath: "test.vue"}, PARSER_OPTIONS))
57-
const ruleContext = new RuleContext(code, result.ast)
5856
ast = result.ast
59-
tokens = result.services.getTemplateBodyTokenStore(ruleContext)
57+
tokens = result.services.getTemplateBodyTokenStore()
6058
})
6159

6260
describe("ast.templateBody", () => {

0 commit comments

Comments
 (0)