Skip to content

Commit 94a1dff

Browse files
committed
completed code_completion test
1 parent 6c9e1b8 commit 94a1dff

File tree

4 files changed

+22
-17
lines changed

4 files changed

+22
-17
lines changed

test/extension.test.ts

+12-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Please refer to their documentation on https://mochajs.org/ for help.
88
import * as path from "path";
99
import * as vscode from "vscode";
1010
import * as yara from "../yara/src/extension";
11-
import {YaraCompletionItemProvider} from "../yara/src/modules";
11+
import {YaraCompletionItemProvider} from "../yara/src/completionProvider";
1212

1313
let workspace = path.join(__dirname, "..", "..", "test/rules/");
1414

@@ -146,14 +146,20 @@ suite("YARA: Provider", function () {
146146
});
147147

148148
test("code completion", function (done) {
149-
const filepath: string = path.join(workspace, "peek_rules.yara");
149+
const filepath: string = path.join(workspace, "code_completion.yara");
150150
vscode.workspace.openTextDocument(filepath).then(function (doc) {
151151
const ccProvider: YaraCompletionItemProvider = new YaraCompletionItemProvider();
152-
// ModuleCompletionExample: Line 53, Col 12
153-
let pos: vscode.Position = new vscode.Position(52, 12);
152+
// "cuckoo.": Line 8, Col 12
153+
let pos: vscode.Position = new vscode.Position(7, 12);
154154
let tokenSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource();
155-
let items = ccProvider.provideCompletionItems(doc, pos, tokenSource.token, undefined);
156-
console.log(items);
155+
ccProvider.provideCompletionItems(doc, pos, tokenSource.token, undefined).then(function (items) {
156+
if (items[0].label == "network" || items[0].kind == vscode.CompletionItemKind.Class &&
157+
items[1].label == "registry" || items[1].kind == vscode.CompletionItemKind.Class &&
158+
items[2].label == "filesystem" || items[2].kind == vscode.CompletionItemKind.Class &&
159+
items[3].label == "sync" || items[3].kind == vscode.CompletionItemKind.Class) {
160+
done();
161+
}
162+
});
157163
});
158164
});
159165

test/rules/code_completion.yara

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
rule ModuleCompletionExample
2+
{
3+
meta:
4+
description = "Module Completion Example"
5+
author = "Test"
6+
reference = "https://infosec-intern.github.io"
7+
condition:
8+
cuckoo.
9+
}

test/rules/peek_rules.yara

-10
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,3 @@ rule RuleReferenceExample
4242
condition:
4343
SyntaxExample and $hex_string
4444
}
45-
46-
rule ModuleCompletionExample
47-
{
48-
meta:
49-
description = "Module Completion Example"
50-
author = "Test"
51-
reference = "https://infosec-intern.github.io"
52-
condition:
53-
cuckoo.
54-
}

yara/src/completionProvider.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function parseSchema(symbols: Array<string>, schema: Object, depth: number): nul
4545
export class YaraCompletionItemProvider implements vscode.CompletionItemProvider {
4646
public provideCompletionItems(doc: vscode.TextDocument, pos: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): vscode.ProviderResult<vscode.CompletionItem[] | vscode.CompletionList> {
4747
return new Promise((resolve, reject) => {
48-
if (context != undefined && context.triggerCharacter == ".") {
48+
if (context == undefined || context.triggerCharacter == ".") {
4949
let items: vscode.CompletionItem[] = Array<vscode.CompletionItem>();
5050
let fields: any = modules.get(doc, pos);
5151
if (fields != null) {

0 commit comments

Comments
 (0)