How to use a named capture group in VS code Find/Replace? - visual-studio-code

In the vs code find/replace editor widget, I'm using a named capture group (?<end>.*\s*). I'm then using ${end}in the replace but its just putting the literal text there instead of the captured contents. The unnamed capture groups are working as expected.
My regular expression works fine in Visual Studio 2019, but I'm not sure how to tweak the named capture group syntax for VS code.

vscode does not support named capture groups in the replacement, see and upvote Use regular expressions in Visual Studio: Named capture groups.
Also see a previous issue https://github.com/microsoft/vscode/issues/88793 that failed due to lack of upvotes.

Related

Not supporting hover variable with hyphen in vscode extension

For debugging Cobol program using vscode extension I have extended debug extension protocol. I have variables with hyphen in my cobol program e.g: emp-salary.
I have set the flag supportsEvaluateForHovers to true.
While debugging I am trying to hover this kind of variable but, value I am getting inside evaluateRequest method is NOT considering this as complete one variable name and just returning hyphen separated part of variable. For example out of emp-salary I do mouse hover over emp it is returning emp only.
My expectation is it shall return emp-salary as it is single variable name.
What exact changes I will need to implement in my code so it will consider hyphen separated variable as one variable?
Try enabling the "Use Managed Compatibility Mode" flag under Debugging. This worked for me today using VS 2019.

Using visual studio Code, How do I search for a string like -> MyFunction("

I'm new to visual studio code. I want to type something in to the search box and find exactly that.
If I enter: MyFunction("
I want it to find all of the uses of the function MyFunction. But VSCode complains about the parenthesis not being closed with error "Invalid regular expression ... Unterminated group"
If I search for just my MyFunction, I get hundreds of extra hits in comments, and other places where the keyword is used.
I've tried googling how the search box is used but have not been able to resolve this.
What is the correct way to use the search box for expressions like the one above?
You are searching using Regex rather than string Match.
You can use Match Whole Word instead of regular expression. (The middle Icon should be selected)

visual studio code suggestion escape

how do I escape using a suggestion? ex every time I write a test the suggested text is TextDecoderStream and as soon as I invoke test it changes to TextDecoderStream(). It also selects TextDecoderStream when I hit enter and tab.
If you are trying to declare a variable name try to embrace it between brackets e.g. "[text]".
If you're looking for another solution try this: Visual Studio Code: close suggestion box on `esc`?

Sublime Text 3: Auto-Complete uses incorrect syntax for for loop

With sublime text 3, the autocomplete when typing "for" and hitting tab gives you:
for x in xrange(1,10):
pass
However, this is not a valid statement for python 3. I've tried creating a new build system using the following:
{
"cmd": ["c:/Python37/python.exe", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
the auto-complete for for still gives the wrong syntax. any advice?
The short version is that the sublime-build and sublime-snippet files that ship with Sublime in support of Python target Python version 2 and not Python version 3. I don't know if that's just due to that being what was used initially or if it's being done on purpose, though.
In Sublime, resources are generally related to a particular language based on the scope provided by the syntax definition. So for example snippets for Python are associated with source.python, your example build file uses that scope to know that it applies to Python files, and so on. As such, no matter what build you happen to be using, that has no effect on the snippets that are being offered.
By way of example, if you use the View Package File command from the command palette and enter the text python for snippet, the list of package resources will filter to Python/Snippets/for.sublime-snippet; pressing Enter to view that resource shows this:
<snippet>
<tabTrigger>for</tabTrigger>
<scope>source.python</scope>
<description>For Loop</description>
<content><![CDATA[
for ${1:x} in ${2:xrange(1,10)}:
${0:pass}
]]></content>
</snippet>
Here the tabTrigger specifies how the snippet inserts, scope controls where it inserts and content controls what it is inserts. Thus, in order to change it to support Python 3, you need to either create your own snippet or modify the existing one.
An issue with creating your own snippet is that it will be added to the list of snippets including the offending one, which allows it to possibly still trigger when you don't expect it to. There is also no general purposes "easy" way to disable individual snippets.
As such, generally the best course of action would be to use the PackageResourceViewer package. Install it, select PackageResourceViewer: Open Resource from the command palette, then select the same file as outlined above and modify the content of the snippet (e.g. replace xrange with range) and save the file.
That will get Sublime to replace the existing snippet with your edited version, so that it takes the place of the existing one and works the way you want.

How can I use curly braces in Netbeans code templates for example for an slf4j template?

Creating a Netbeans code template for creating an slf logger is described here:
http://wiki.netbeans.org/SLF4JCodeTemplate
However creating code templates for log statements, e.g.
logger.debug("Something: {}", var);
is harder than expected because the template language doesn't balance curly braces. This means it will end the capture at the first ending curly brace.
There exist some examples, like for example How to get current class name in Netbeans code template? but they do not touch into the curly brace issue.
I have tried to escape them in every way I could think of so farm including:
${LOGGER default="logger" editable=false}.debug("${logMessage}${: '{}'}", ${EXP instanceof="<any>" default="exp"});
and
${LOGGER default="logger" editable=false}.debug("${logMessage}${: \{\}}", ${EXP instanceof="<any>" default="exp"});
but no luck. Also my google skills have been failing me so far.
Turns out there is a simple solution. I didn't find it anywhere near anything about netbeans code templates, but under a question about freemarker:
How to output ${expression} in Freemarker without it being interpreted?
Basically the answer is to use r"..." around the code, like this:
${LOGGER default="logger" editable=false}.debug("${logMessage}${:r"{}"}", ${EXP instanceof="<any>" default="exp"});
Now this can be assigned to sld, so I can type slt, expand it to:
logger.debug("logMessage: {}", <last variable>);
Where "logMessage" is selected (so I can overwrite it with something useful, one tab selects ": {}" so I can delete it if I want to log without parameters and a last tab selects which is the last assigned value (in case I want to replace or remove it).