From 5155cbc4f455d9eb32389fe72b2d0f55c73953c3 Mon Sep 17 00:00:00 2001
From: i582 <51853996+i582@users.noreply.github.com>
Date: Sat, 8 Feb 2025 02:40:16 +0400
Subject: [PATCH] feat(completion): add `extends mutates fun foo(self: Type)
 {}` to completion

Fixes #71
---
 .../providers/TopLevelFunctionCompletionProvider.ts   | 11 +++++++++++
 server/src/e2e/suite/index.ts                         |  2 +-
 .../src/e2e/suite/testcases/completion/top-level.test |  2 ++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/server/src/completion/providers/TopLevelFunctionCompletionProvider.ts b/server/src/completion/providers/TopLevelFunctionCompletionProvider.ts
index caa080e3..d0ee82f2 100644
--- a/server/src/completion/providers/TopLevelFunctionCompletionProvider.ts
+++ b/server/src/completion/providers/TopLevelFunctionCompletionProvider.ts
@@ -57,6 +57,17 @@ export class TopLevelFunctionCompletionProvider implements CompletionProvider {
             weight: CompletionWeight.KEYWORD,
         })
 
+        result.add({
+            label: "extends mutates",
+            labelDetails: {
+                detail: " name(self: <type>) {}",
+            },
+            kind: CompletionItemKind.Keyword,
+            insertText: `extends mutates fun ${extendsTemplate}`,
+            insertTextFormat: InsertTextFormat.Snippet,
+            weight: CompletionWeight.KEYWORD,
+        })
+
         result.add({
             label: "extends native",
             labelDetails: {
diff --git a/server/src/e2e/suite/index.ts b/server/src/e2e/suite/index.ts
index 78a2e1bf..b8a5f9f5 100644
--- a/server/src/e2e/suite/index.ts
+++ b/server/src/e2e/suite/index.ts
@@ -12,7 +12,7 @@ export function run(): Promise<void> {
     const testsRoot = path.resolve(__dirname, ".")
 
     return new Promise((resolve, reject) => {
-        glob("*.test.js", {
+        glob("completion.test.js", {
             cwd: testsRoot,
         })
             .then(files => {
diff --git a/server/src/e2e/suite/testcases/completion/top-level.test b/server/src/e2e/suite/testcases/completion/top-level.test
index a2b0a1f0..8e06d28a 100644
--- a/server/src/e2e/suite/testcases/completion/top-level.test
+++ b/server/src/e2e/suite/testcases/completion/top-level.test
@@ -11,6 +11,7 @@ fun foo() {}
 13 contract Name with Trait {}
 13 asm fun name() {}
 13 extends fun name(self: <type>) {}
+13 extends mutates name(self: <type>) {}
 13 extends native name(self: <type>);
 13 fun name() {}
 13 native name() {}
@@ -28,6 +29,7 @@ fun foo() {}
 13 contract Name with Trait {}
 13 asm fun name() {}
 13 extends fun name(self: <type>) {}
+13 extends mutates name(self: <type>) {}
 13 extends native name(self: <type>);
 13 fun name() {}
 13 native name() {}