diff --git a/README.md b/README.md index 9a5d985..565e2a6 100644 --- a/README.md +++ b/README.md @@ -52,3 +52,7 @@ hover. **Sphinx-Needs Views:** ![image](https://raw.githubusercontent.com/useblocks/sphinx-needs-vscode/main/docs/_images/sn-views.gif) + +**Sphinx-Needs Current Explorer View** + +![image](https://raw.githubusercontent.com/useblocks/sphinx-needs-vscode/main/docs/_images/sn-current-view.gif) diff --git a/client/src/extension.ts b/client/src/extension.ts index e7e581d..5b732b7 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -19,7 +19,7 @@ export function activate(context: ExtensionContext) { console.info('SNV: Activated Sphinx-Needs-VsCode Extension.'); // TreeView of Sphinx-Needs Objects - const needsExplorerProvider = new NeedsExplorerProvider(); + const needsExplorerProvider = new NeedsExplorerProvider(false); window.createTreeView('sphinxNeedsExplorer', { treeDataProvider: needsExplorerProvider }); @@ -49,6 +49,12 @@ export function activate(context: ExtensionContext) { env.openExternal(Uri.parse(item)); }); + // Treeview of Sphinx-Needs objects in current active editor + const needsCurrentProvider = new NeedsExplorerProvider(true); + window.createTreeView('sphinxNeedsCurrent', { + treeDataProvider: needsCurrentProvider + }); + // The server is implemented in node const serverModule = context.asAbsolutePath(path.join('server', 'out', 'server.js')); // The debug options for the server diff --git a/client/src/needsExplorer.ts b/client/src/needsExplorer.ts index aa3b71a..8af568a 100644 --- a/client/src/needsExplorer.ts +++ b/client/src/needsExplorer.ts @@ -34,15 +34,20 @@ interface DocConf { srcDir: string; } +interface NeedsPerDoc { + [doc_path: string]: Needs; +} + interface NeedsInfo { needs: Needs; allFiles: string[]; src_dir: string; needs_json: string; + needs_per_doc: NeedsPerDoc; } interface NeedsInfos { - [path: string]: NeedsInfo | undefined; + [path: string]: NeedsInfo; } let tslogger: TimeStampedLogger; @@ -57,13 +62,15 @@ export class NeedsExplorerProvider implements vscode.TreeDataProvider this.onActiveEditorChanged()); // Create file watcher for needs.json @@ -144,14 +154,33 @@ export class NeedsExplorerProvider implements vscode.TreeDataProvider { + // Check if current active editor relevant + let found_need_info = false; + let found_need_info_key = ''; + for (const [idx, need_info] of Object.entries(this.needsInfos)) { if (need_info?.allFiles && need_info?.allFiles.indexOf(curr_doc) >= 0) { - this.needsInfo = need_info; - this._onDidChangeTreeData.fire(undefined); + found_need_info = true; + found_need_info_key = idx; } - }); + } + + if (found_need_info) { + this.needsInfo = this.needsInfos[found_need_info_key]; + if (this.currEditorView) { + this.needsInfo.needs = this.needsInfo.needs_per_doc[curr_doc]; + } + } else { + this.needsInfo = { + needs: {}, + allFiles: [], + src_dir: '', + needs_json: '', + needs_per_doc: {} + }; + } + this._onDidChangeTreeData.fire(undefined); } } @@ -219,7 +248,8 @@ export class NeedsExplorerProvider implements vscode.TreeDataProvider Loaded nedds json: ${needsJsonFilePath}`); @@ -412,9 +442,10 @@ export class NeedsExplorerProvider implements vscode.TreeDataProvider { if (curr_src_dir.endsWith('/')) { need_doc_path = curr_src_dir + nd.docname + nd.doctype; @@ -425,16 +456,32 @@ export class NeedsExplorerProvider implements vscode.TreeDataProvider