codn_ts
Version:
智能代码分析工具 - 支持语义搜索、调用链分析和代码结构可视化,对大模型/AI agent 友好
126 lines • 4.22 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const path = __importStar(require("path"));
const reference_analyzer_1 = require("./reference_analyzer");
// Mock console.log,避免 LSP 初始化日志输出
vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
// Mock依赖
vitest_1.vi.mock("./lsp_core", () => {
class MockLSPClient {
constructor() { }
async start() { }
async shutdown() { }
async sendDidOpen() { }
async sendDidClose() { }
async sendDocumentSymbol() {
return [
{
name: "foo",
kind: 12, // Function
location: {
range: {
start: { line: 0, character: 0 },
end: { line: 0, character: 10 },
},
},
},
];
}
async readFile() {
return "function foo() {}";
}
async sendReferences() {
return {
result: [
{
uri: "file:///mock/path/file.ts",
range: {
start: { line: 1, character: 2 },
end: { line: 1, character: 5 },
},
},
],
};
}
}
return {
LSPClient: MockLSPClient,
DEFAULT_CONFIG: {
timeout: 30000,
logLevel: "error",
},
SymbolKind: {
Function: 12,
},
};
});
vitest_1.vi.mock("./os_utils", async () => {
return {
detectDominantLanguages: () => ["typescript"],
getLanguageFileExtensions: () => "ts",
};
});
vitest_1.vi.mock("./symbol_utils", async () => {
return {
checkRealFuncChar: () => ({ line: 0, character: 9 }),
};
});
vitest_1.vi.mock("glob", async () => {
return {
glob: async () => [path.resolve("mock_project/file.ts")],
};
});
vitest_1.vi.mock("fs", async () => {
const actual = await vitest_1.vi.importActual("fs");
return {
...actual,
readFileSync: () => "function foo() {}",
};
});
(0, vitest_1.describe)("analyzeProjectReferences", () => {
(0, vitest_1.it)("should return correct ReferenceTriple array", async () => {
const result = await (0, reference_analyzer_1.analyzeProjectReferences)("mock_project");
(0, vitest_1.expect)(result).toEqual([
{
caller: "../../../../../mock/path/file.ts:2:3",
callee: "file.ts:foo",
location: "file.ts:1:10",
},
]);
});
});
//# sourceMappingURL=reference_analyzer.test.js.map