API Stability Notice
Macroforge is under active development. The API is not yet stable and may change between versions. Some documentation sections may be outdated.
NativePlugin
A stateful plugin class with version-based caching, designed for integration with language servers and IDEs.
Constructor
TypeScript
const plugin = new NativePlugin();Methods
processFile()
Process a file with version-based caching:
TypeScript
processFile(
filepath: string,
code: string,
options?: ProcessFileOptions
): ExpandResultTypeScript
interface ProcessFileOptions {
// Cache key - if unchanged, returns cached result
version?: string;
}getMapper()
Get the position mapper for a previously processed file:
TypeScript
getMapper(filepath: string): NativeMapper | nullmapDiagnostics()
Map diagnostics from expanded positions to original positions:
TypeScript
mapDiagnostics(
filepath: string,
diagnostics: JsDiagnostic[]
): JsDiagnostic[]log() / setLogFile()
Logging utilities for debugging:
TypeScript
log(message: string): void
setLogFile(path: string): voidCaching Behavior
The plugin caches expansion results by file path and version:
TypeScript
const plugin = new NativePlugin();
// First call - performs expansion
const result1 = plugin.processFile("user.ts", code, { version: "1" });
// Same version - returns cached result instantly
const result2 = plugin.processFile("user.ts", code, { version: "1" });
// Different version - re-expands
const result3 = plugin.processFile("user.ts", newCode, { version: "2" });Example: Language Server Integration
TypeScript
import { NativePlugin } from "macroforge";
class MacroforgeLanguageService {
private plugin = new NativePlugin();
processDocument(uri: string, content: string, version: number) {
// Process with version-based caching
const result = this.plugin.processFile(uri, content, {
version: String(version)
});
// Get mapper for position translation
const mapper = this.plugin.getMapper(uri);
return { result, mapper };
}
getSemanticDiagnostics(uri: string, diagnostics: Diagnostic[]) {
// Map positions from expanded to original
return this.plugin.mapDiagnostics(uri, diagnostics);
}
}Thread Safety
The NativePlugin class is thread-safe and can be used from multiple async contexts.
Each file is processed in an isolated thread with its own stack space.