@@ -19,6 +19,7 @@ import * as Annotator from './annotator';
1919import { LuaRocksManager } from './luarocks/LuaRocksManager' ;
2020import { LuaRocksTreeProvider , PackageTreeItem } from './luarocks/LuaRocksTreeProvider' ;
2121import { EmmyrcSchemaContentProvider } from './emmyrcSchemaContentProvider' ;
22+ import { SyntaxTreeManager , setClientGetter } from './syntaxTreeProvider' ;
2223
2324/**
2425 * Debugger configuration interface
@@ -41,6 +42,7 @@ export let extensionContext: EmmyContext;
4142let activeEditor : vscode . TextEditor | undefined ;
4243let luaRocksManager : LuaRocksManager | undefined ;
4344let luaRocksTreeProvider : LuaRocksTreeProvider | undefined ;
45+ let syntaxTreeManager : SyntaxTreeManager | undefined ;
4446
4547/**
4648 * Extension activation entry point
@@ -90,6 +92,7 @@ function registerCommands(context: vscode.ExtensionContext): void {
9092 { id : 'emmy.showServerMenu' , handler : showServerMenu } ,
9193 { id : 'emmy.showReferences' , handler : showReferences } ,
9294 { id : 'emmy.insertEmmyDebugCode' , handler : insertEmmyDebugCode } ,
95+ { id : 'emmy.showSyntaxTree' , handler : showSyntaxTree } ,
9396 // LuaRocks commands
9497 { id : 'emmylua.luarocks.searchPackages' , handler : searchPackages } ,
9598 { id : 'emmylua.luarocks.installPackage' , handler : installPackage } ,
@@ -138,6 +141,13 @@ function registerLanguageConfiguration(context: vscode.ExtensionContext): void {
138141 * Initialize all extension features
139142 */
140143async function initializeExtension ( ) : Promise < void > {
144+ // Initialize syntax tree manager
145+ syntaxTreeManager = new SyntaxTreeManager ( ) ;
146+ extensionContext . vscodeContext . subscriptions . push ( syntaxTreeManager ) ;
147+
148+ // Set up client getter for syntax tree provider
149+ setClientGetter ( ( ) => extensionContext . client ) ;
150+
141151 await startServer ( ) ;
142152 registerDebuggers ( ) ;
143153 await initializeLuaRocks ( ) ;
@@ -425,6 +435,39 @@ async function insertEmmyDebugCode() {
425435 activeEditor . insertSnippet ( ins ) ;
426436}
427437
438+ /**
439+ * Show syntax tree for current document
440+ * Similar to rust-analyzer's "View Syntax Tree" feature
441+ */
442+ async function showSyntaxTree ( ) : Promise < void > {
443+ const editor = vscode . window . activeTextEditor ;
444+
445+ if ( ! editor ) {
446+ vscode . window . showWarningMessage ( 'No active editor' ) ;
447+ return ;
448+ }
449+
450+ const document = editor . document ;
451+
452+ if ( document . languageId !== extensionContext . LANGUAGE_ID ) {
453+ vscode . window . showWarningMessage ( 'Current file is not a Lua file' ) ;
454+ return ;
455+ }
456+
457+ if ( ! extensionContext . client ) {
458+ vscode . window . showWarningMessage ( 'Language server is not running' ) ;
459+ return ;
460+ }
461+
462+ if ( ! syntaxTreeManager ) {
463+ vscode . window . showErrorMessage ( 'Syntax tree manager is not initialized' ) ;
464+ return ;
465+ }
466+
467+ // Show syntax tree using the manager
468+ await syntaxTreeManager . show ( document . uri , editor . selection ) ;
469+ }
470+
428471// LuaRocks Integration Functions
429472
430473async function initializeLuaRocks ( ) : Promise < void > {
0 commit comments