Hi @Gramen Tontchev, for non-classes and routines on the local file system the main extension needs to use the file name to determine the name of the document on the server. There's no guarantee that all "other" document types will have the name of the document stored in the text, and even if that were true, it would be very difficult for the extension to know how to extract that info from each one. I have a PR open that will improve the client-side editing workflow, but this behavior remains the same. 

TL;DR: The name of the file must match the name of the document on the server.

@David Hockenbroch 
This functionality exists in VS Code. It's provided by the Language Server extension. Here's the description of the feature from that extension's README:

To invoke the command, right-click in a blank line of a class definition body and select the Override Class Members row in the menu that appears. The command will insert the selected class member definition(s) at the cursor position where the command was invoked.

@Igor Barboza 
You can use %Library.SyntaxColor to parse ObjectScript. Here's some code to get you started:

ClassMethod WriteAllCommands()
{
    Set syn = ##class(%SyntaxColor).%New(), in = ##class(%Stream.TmpCharacter).%New(), out = ##class(%Stream.TmpCharacter).%New()
    #; TODO Put your document's contents into "in"
    Do syn.Color(in,out,"COS" /* or "INT" or "CLS" */,"K" /* means JSON output */)
    #; Format of the JSON output:
    #; [
    #;     #; One array for each source line
    #;     [
    #;         {
    #;             #; Language of the token. See Languages() in %Library.SyntaxColor.
    #;             "l": %Integer,
    #;             #; Attribute of the token. See Attributes() in %Library.SyntaxColor.
    #;             "s": %Integer,
    #;             #; Zero-indexed start position of the token on the line
    #;             "p": %Integer,
    #;             #; Length of the token in characters
    #;             "c": %Integer
    #;         }
    #;     ]
    #; ]
    Set json = ##class(%DynamicArray).%FromJSON(out), lineIter = json.%GetIterator()
    While lineIter.%GetNext(.lineNum,.lineTokens) {
        Set tokensIter = lineTokens.%GetIterator()
        While tokensIter.%GetNext(,.token) {
            If (
                #; COS
                (token.l = 1) && (
                    #; Command
                    (token.s = 32) ||
                    #; User-defined Z command 
                    (token.s = 52)
                )
            ) {
                Write "Command starting in column ",token.p + 1," of line ",lineNum + 1,!
            }
        }
    }
}

@David Marinkovic 
VS Code uses REST to connect to IRIS. If you're using a version without the private web server, you need to configure an external web server. This is needed for the management portal as well. Since you're on Windows, your installer probably configured IIS to serve web applications for IRIS. Documentation can be found here.

@Alin Soare You can't prevent that. The actual text of the class isn't stored in the database. During a save, it gets converted to a global that gets stored in the database, and then converted back into text. The class's text is always regenerated in "canonical" form, with excess spaces removed, capitalization normalized etc. This process doesn't affect method/query implementation code though, it's purely cosmetic.