From 0953f88aab2ca96262ec877355addfc3fd7c62e1 Mon Sep 17 00:00:00 2001 From: RblSb Date: Thu, 25 Jul 2024 19:02:12 +0300 Subject: [PATCH 1/4] Improve postfix trace --- .../haxe/completion/PostfixCompletion.hx | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx index 7657b195..91e14690 100644 --- a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx +++ b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx @@ -55,6 +55,12 @@ class PostfixCompletion { if (expr.startsWith("(") && expr.endsWith(")")) { expr = expr.substring(1, expr.length - 1); } + // `;` char in `foo.;` completion cases + final afterExprRange:Range = { + start: subject.range.end.translate(0, 1), + end: subject.range.end.translate(0, 2) + } + final afterExprChar = data.doc.getText(afterExprRange); var replaceRange = data.replaceRange; if (replaceRange == null) { @@ -125,6 +131,7 @@ class PostfixCompletion { } if (level != Filtered) { + createTraceItem(expr, afterExprChar, add); createNonFilteredItems(dotPath, expr, add); } @@ -139,6 +146,16 @@ class PostfixCompletion { return result; } + function createTraceItem(expr:String, afterExprChar:String, add:PostfixCompletionItem->Void):Void { + final endChar = afterExprChar == "\n" ? ";" : ""; + add({ + label: "trace", + detail: 'trace(expr)$endChar', + insertText: 'trace($${1:$expr})$endChar', + insertTextFormat: Snippet + }); + } + function createNonFilteredItems(dotPath:Null, expr:String, add:PostfixCompletionItem->Void) { if (dotPath != Std_String) { add({ @@ -149,12 +166,6 @@ class PostfixCompletion { }); } - add({ - label: "trace", - detail: "trace(expr);", - insertText: 'trace($${1:$expr});', - insertTextFormat: Snippet - }); // TODO: check if we're on a sys target add({ label: "print", From a6822d2d04f85f8a1870871929b4cc9376ead412 Mon Sep 17 00:00:00 2001 From: RblSb Date: Mon, 29 Jul 2024 19:29:34 +0300 Subject: [PATCH 2/4] Fix other cases --- .../features/haxe/completion/PostfixCompletion.hx | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx index 91e14690..f2c14cba 100644 --- a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx +++ b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx @@ -55,12 +55,6 @@ class PostfixCompletion { if (expr.startsWith("(") && expr.endsWith(")")) { expr = expr.substring(1, expr.length - 1); } - // `;` char in `foo.;` completion cases - final afterExprRange:Range = { - start: subject.range.end.translate(0, 1), - end: subject.range.end.translate(0, 2) - } - final afterExprChar = data.doc.getText(afterExprRange); var replaceRange = data.replaceRange; if (replaceRange == null) { @@ -68,6 +62,9 @@ class PostfixCompletion { } final removeRange:Range = {start: subject.range.start, end: replaceRange.start}; + // `;` char in `foo.;` completion cases + final afterExprChar = data.doc.characterAt(replaceRange.end); + final result:Array = []; function add(item:PostfixCompletionItem) { result.push(createPostfixCompletionItem(item, data.doc, removeRange, replaceRange)); @@ -147,7 +144,7 @@ class PostfixCompletion { } function createTraceItem(expr:String, afterExprChar:String, add:PostfixCompletionItem->Void):Void { - final endChar = afterExprChar == "\n" ? ";" : ""; + final endChar = (afterExprChar == ";" || afterExprChar == ")") ? "" : ";"; add({ label: "trace", detail: 'trace(expr)$endChar', From 98c21cc2f22879be542f066b6665098c042141e3 Mon Sep 17 00:00:00 2001 From: RblSb Date: Mon, 29 Jul 2024 22:51:01 +0300 Subject: [PATCH 3/4] Fix var/final too with better eating --- .../haxe/completion/PostfixCompletion.hx | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx index f2c14cba..e90e055a 100644 --- a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx +++ b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx @@ -62,9 +62,6 @@ class PostfixCompletion { } final removeRange:Range = {start: subject.range.start, end: replaceRange.start}; - // `;` char in `foo.;` completion cases - final afterExprChar = data.doc.characterAt(replaceRange.end); - final result:Array = []; function add(item:PostfixCompletionItem) { result.push(createPostfixCompletionItem(item, data.doc, removeRange, replaceRange)); @@ -128,7 +125,6 @@ class PostfixCompletion { } if (level != Filtered) { - createTraceItem(expr, afterExprChar, add); createNonFilteredItems(dotPath, expr, add); } @@ -143,16 +139,6 @@ class PostfixCompletion { return result; } - function createTraceItem(expr:String, afterExprChar:String, add:PostfixCompletionItem->Void):Void { - final endChar = (afterExprChar == ";" || afterExprChar == ")") ? "" : ";"; - add({ - label: "trace", - detail: 'trace(expr)$endChar', - insertText: 'trace($${1:$expr})$endChar', - insertTextFormat: Snippet - }); - } - function createNonFilteredItems(dotPath:Null, expr:String, add:PostfixCompletionItem->Void) { if (dotPath != Std_String) { add({ @@ -163,6 +149,13 @@ class PostfixCompletion { }); } + add({ + label: "trace", + detail: 'trace(expr);', + insertText: 'trace($${1:$expr});', + insertTextFormat: Snippet, + eat: ";" + }); // TODO: check if we're on a sys target add({ label: "print", @@ -356,8 +349,12 @@ while (i-- > 0) { function createPostfixCompletionItem(data:PostfixCompletionItem, doc:HxTextDocument, removeRange:Range, replaceRange:Range):CompletionItem { if (data.eat != null) { final pos = replaceRange.end; - final nextChar = doc.getText({start: pos, end: pos.translate(0, 1)}); - if (data.eat == nextChar) { + var nextChar = doc.characterAt(pos); + // if user writes `.l abel` too fast, detect it and check next char again + if (nextChar == data.label.charAt(0)) { + nextChar = doc.characterAt(pos.translate(0, 1)); + } + if (nextChar == data.eat) { replaceRange = {start: replaceRange.start, end: pos.translate(0, 1)}; } }; From 458efc7dca0bcc857c32e3e232b9b551ae8fddf8 Mon Sep 17 00:00:00 2001 From: RblSb Date: Mon, 29 Jul 2024 22:57:44 +0300 Subject: [PATCH 4/4] minor --- .../features/haxe/completion/PostfixCompletion.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx index e90e055a..a9cea776 100644 --- a/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx +++ b/src/haxeLanguageServer/features/haxe/completion/PostfixCompletion.hx @@ -151,7 +151,7 @@ class PostfixCompletion { add({ label: "trace", - detail: 'trace(expr);', + detail: "trace(expr);", insertText: 'trace($${1:$expr});', insertTextFormat: Snippet, eat: ";" @@ -351,7 +351,7 @@ while (i-- > 0) { final pos = replaceRange.end; var nextChar = doc.characterAt(pos); // if user writes `.l abel` too fast, detect it and check next char again - if (nextChar == data.label.charAt(0)) { + if (nextChar == data.label.charAt(0) && nextChar != data.eat) { nextChar = doc.characterAt(pos.translate(0, 1)); } if (nextChar == data.eat) {