Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions yara/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { YaraDefinitionProvider } from './lib/definitionProvider';
import { YaraReferenceProvider } from './lib/referenceProvider';
import { YaraSnippetCompletionItemProvider } from './lib/snippetProvider';
import { YaraHexStringHoverProvider } from './lib/hoverProvider';
import { YaraDocumentSymbolProvider } from "./lib/symbolProvider";


export function activate(context: vscode.ExtensionContext): void {
Expand Down Expand Up @@ -39,6 +40,9 @@ export function activate(context: vscode.ExtensionContext): void {
}
});
context.subscriptions.push(configWatcher);
const symbolDisposable: vscode.Disposable = vscode.languages.registerDocumentSymbolProvider(YARA, new YaraDocumentSymbolProvider());
context.subscriptions.push(symbolDisposable);

if (debug) { log('Registered configuration watcher'); }
}

Expand Down
25 changes: 25 additions & 0 deletions yara/src/lib/symbolProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'use strict';

import vscode = require('vscode');

export class YaraDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
public provideDocumentSymbols(
document: vscode.TextDocument,
token: vscode.CancellationToken): Promise<vscode.DocumentSymbol[]> {
return new Promise((resolve, reject) => {
const symbols: vscode.DocumentSymbol[] = [];
for (let i = 0; i < document.lineCount; i++) {
const line = document.lineAt(i);
if (line.text.startsWith("rule")) {
const name = line.text.split(" ")[1]
const symbol = new vscode.DocumentSymbol(
name, 'Rule',
vscode.SymbolKind.Class,
line.range, line.range)
symbols.push(symbol)
}
}
resolve(symbols);
});
}
}