import { LanguageProfileUtil } from "../../../code-context/_base/LanguageProfile"; const Parser = require("web-tree-sitter"); import { TreeSitterFile } from "../../../code-context/ast/TreeSitterFile"; import { ScopeBuilder } from "../../../code-search/scope-graph/ScopeBuilder"; import { TestLanguageService } from "../../TestLanguageService"; describe('ScopeBuilder for TypeScript', () => { let parser: any; let language: any; let langConfig = LanguageProfileUtil.from("typescript")!!; beforeEach(async () => { await Parser.init(); parser = new Parser(); const languageService = new TestLanguageService(parser); language = await langConfig.grammar(languageService, "java")!!; parser.setLanguage(language); parser.setLogger(null); }); it('build for node', async () => { const javaHelloWorld = ` import Link from "next/link" export default function IndexPage() { return (
My second page My third page
) } `; parser.setTimeoutMicros(10 ** 6); const rootNode = parser.parse(javaHelloWorld).rootNode; const query = langConfig.scopeQuery.query(language); let scopeBuilder = new ScopeBuilder(query!!, rootNode, javaHelloWorld, langConfig); let output = await scopeBuilder.build(); const hoverRanges = output.hoverableRanges(); expect(hoverRanges.length).toBe(5); const allText = hoverRanges.map((range) => range.getText()).join(", "); expect(allText).toBe("Link, IndexPage, href, href, Link"); }); it('test for main scopes', async () => { const sourceCode = ` import Link from "next/link" export default function IndexPage() { return (
My second page My third page
) } `; let tree = parser.parse(sourceCode); const tsf = new TreeSitterFile(sourceCode, tree, langConfig, parser, language, ""); let scopeGraph = await tsf.scopeGraph(); const imports = scopeGraph.allImportsBySource(sourceCode); expect(imports.length).toBe(1); expect(imports[0]).toBe('import Link from "next/link"'); }); });