From 0f9078e9d7a2a5943cc108c08179d771b4a77c06 Mon Sep 17 00:00:00 2001 From: fisker Date: Wed, 5 Mar 2025 13:32:58 +0800 Subject: [PATCH] feat: add `TokenStore#get{Loc,Range}()` --- src/external/token-store/index.ts | 20 ++++++++++++++++++++ test/tokens.js | 15 +++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/external/token-store/index.ts b/src/external/token-store/index.ts index a0bdabb..3369210 100644 --- a/src/external/token-store/index.ts +++ b/src/external/token-store/index.ts @@ -751,4 +751,24 @@ export default class TokenStore { filter: isCommentToken, }) } + + /** + * Returns the location of the given node or token. + * @param nodeOrToken The node or token to get the location of. + * @returns The location of the node or token. + */ + // eslint-disable-next-line class-methods-use-this + public getLoc(nodeOrToken: HasLocation) { + return nodeOrToken.loc + } + + /** + * Returns the range of the given node or token. + * @param nodeOrToken The node or token to get the range of. + * @returns The range of the node or token. + */ + // eslint-disable-next-line class-methods-use-this + public getRange(nodeOrToken: HasLocation) { + return nodeOrToken.range + } } diff --git a/test/tokens.js b/test/tokens.js index 51a68c2..de37029 100644 --- a/test/tokens.js +++ b/test/tokens.js @@ -285,4 +285,19 @@ describe("services.getTemplateBodyTokenStore", () => { assert.deepStrictEqual(actual, ["div", ">"]) }) }) + + describe("TokenStore#get{Range,Loc}()", () => { + it("should return loc and range.", () => { + const { + templateBody: { + children: [node], + tokens: [token], + }, + } = ast + assert.equal(typeof tokens.getRange(node)[0], "number") + assert.equal(typeof tokens.getRange(token)[1], "number") + assert.equal(typeof tokens.getLoc(node).start.line, "number") + assert.equal(typeof tokens.getLoc(node).end.column, "number") + }) + }) })