Skip to main content
Glama
SiroSuzume

MCP ts-morph Refactoring Tools

by SiroSuzume
update-target-file.test.ts2.32 kB
import { describe, it, expect } from "vitest"; import { Project } from "ts-morph"; import { updateTargetFile } from "./update-target-file"; import type { ImportMap } from "./generate-content/build-new-file-import-section"; describe("updateTargetFile", () => { it("既存ファイルに新しい宣言と、それに必要な新しい名前付きインポートを追加・マージできる", () => { const project = new Project({ useInMemoryFileSystem: true }); const targetFilePath = "/src/target.ts"; project.createSourceFile( "/utils.ts", "export const foo = 1; export const bar = 2; export const qux = 3;", ); const initialContent = `import { foo, bar } from "../utils"; console.log(foo); console.log(bar); `; const targetSourceFile = project.createSourceFile( targetFilePath, initialContent, ); const requiredImportMap: ImportMap = new Map([ [ "../utils", { namedImports: new Set(["qux"]), isNamespaceImport: false, }, ], ]); const declarationStrings: string[] = [ "export function baz() { return qux(); }", ]; const expectedContent = `import { bar, foo, qux } from "../utils"; console.log(foo); console.log(bar); export function baz() { return qux(); } `; updateTargetFile(targetSourceFile, requiredImportMap, declarationStrings); expect(targetSourceFile.getFullText().trim()).toBe(expectedContent.trim()); }); it("requiredImportMap に自己参照パスが含まれていても、自己参照インポートは追加しない", () => { const project = new Project({ useInMemoryFileSystem: true }); const targetFilePath = "/src/target.ts"; const initialContent = `export type ExistingType = number; console.log('hello'); `; const targetSourceFile = project.createSourceFile( targetFilePath, initialContent, ); const requiredImportMap: ImportMap = new Map([ [ ".", { namedImports: new Set(["ExistingType"]), isNamespaceImport: false, }, ], ]); const declarationStrings: string[] = []; const expectedContent = initialContent; updateTargetFile(targetSourceFile, requiredImportMap, declarationStrings); expect(targetSourceFile.getFullText().trim()).toBe(expectedContent.trim()); }); // TODO: Add more realistic test cases (e.g., default imports, different modules) });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SiroSuzume/mcp-ts-morph'

If you have feedback or need assistance with the MCP directory API, please join our Discord server