go to post Brett Saviano · Jan 17, 2024 @Mathew Rimmington Sorry, I misread the prompt in the screenshot. Can you open the settings.json file that contains the server definition that you're having trouble with and send me that? I'd like to confirm that it has "UnknownUser" as the username and not no username. If so, I can modify the Language Server to handle that case better. I know what's happening now. You're creating the server definition with no username, and when the server manager extension tries to use it, it assumes that you wanted to store your credentials securely, so it gives you this prompt. When you leave it blank, it inserts "UnknownUser" with no password as your credentials. The Language Server extension needs to handle that case. I will make the fix.
go to post Brett Saviano · Jan 16, 2024 @Mathew Rimmington The Language Server expects that if you want to use unauthenticated access then you need to provide no username, not "UnknownUser".
go to post Brett Saviano · Jan 11, 2024 @Scott Roth You can redirect output to a file in the mgr directory. Docs are here.
go to post Brett Saviano · Dec 27, 2023 Hi @Pietro Di Leo, my post on features unique to the VS Code WebSocket Terminal is now live and can be viewed here. I think it's a nice addendum to your very informative article!
go to post Brett Saviano · Dec 18, 2023 @Rodrigo Werneck I recommend you use an intermediary stream to avoid <MAXSTRING> errors with large JSON objects: ClassMethod DuplicateDAO(dao As %DynamicAbstractObject) As %DynamicAbstractObject { Set strm = ##class(%Stream.TmpCharacter).%New() Do dao.%ToJSON(strm) Return ##class(%DynamicAbstractObject).%FromJSON(strm) }
go to post Brett Saviano · Dec 15, 2023 @Stephane Devin Here's a pretty-printed version of the attributes list for JavaScript: Attribute 0: ErrorAttribute 1: White SpaceAttribute 2: _TabAttribute 3: LabelAttribute 4: DelimiterAttribute 5: StringAttribute 6: CommentAttribute 7: Decimal integerAttribute 8: Hexadecimal integerAttribute 9: Floating point numberAttribute 10: Regexp delimiterAttribute 11: Regexp bodyAttribute 12: Regexp escape sequenceAttribute 13: Regexp flagsAttribute 14: IdentifierAttribute 15: OperatorAttribute 16: Definition keywordAttribute 17: Statement keywordAttribute 18: Literal keywordAttribute 19: Expression keywordAttribute 20: Future keywordAttribute 21: CSP extensionAttribute 22: JSON property name
go to post Brett Saviano · Dec 14, 2023 @Stephane Devin You can use %SyntaxColor to parse JavaScript. Here's a very simple example that reads in a JS file, parses it, and returns a JSON representation of the semantic tokens: ClassMethod JSTokens() As %Boolean { #; Reading from a file, writing to a temporary stream Set syn = ##class(%SyntaxColor).%New(), in = ##class(%Stream.FileCharacter).%New(), out = ##class(%Stream.TmpCharacter).%New() #; Need the "K" flag to get JSON output Do in.LinkToFile("/Users/bsaviano/Desktop/test.js"), syn.Color(in,out,"JS","K") #; Get a %DynamicArray from the stream Set tokens = ##class(%DynamicArray).%FromJSON(out) #; Process JSON ... #; JSON is of the format: #; { #; // The position of the token within the line #; p: number; #; // The length of the token #; c: number; #; // Language number, see %SyntaxColor::Languages() #; l: number; #; // Attribute number, see %SyntaxColor::Attributes() #; s: number; #; }[][] #; Where there is one array per line of the source document } I suggest you study the class reference for %Library.SyntaxColor since it's not that easy to use.
go to post Brett Saviano · Nov 16, 2023 Great post @Pietro Di Leo! For those interested in the features unique to the WebSocket Terminal, I will publish an article on this topic soon. Stay tuned!
go to post Brett Saviano · Nov 2, 2023 @Nicki Vallentgoed There isn't a way to check if a file is out of date without saving it. I think the best change you could make to your workflow would be using a private server instead of a shared server. Since you're working with local files, you shouldn't care about the server version since it's not the source of truth. If you used your own private development server you could turn off the version checking logic and let your source control system handle differences.
go to post Brett Saviano · Sep 12, 2023 @Pravin Barton If you want to only search a single folder, you can right-click on it in the explorer and select "Find in Folder...". VS Code will show the search view and auto-populate the "files to include" text box.
go to post Brett Saviano · Sep 5, 2023 @Marcel den Ouden The VS Code extension uses your objectscript.export settings to determine what the name of the file should be from its URI. It assumes that if you're working in a client-side folder you will have those settings properly configured for how your classes are stored in the local folder (since they are needed to export classes). I don't know how the full path could be used for the file name so that is probably a bug.
go to post Brett Saviano · Aug 3, 2023 @Hannah Sullivan This is documented in the Server Manager's README. It will be added to the official InterSystems documentation for VS Code at a later date.
go to post Brett Saviano · Jul 26, 2023 @Kevin Kindschuh The VS Code Integrated Terminal is an OS shell, so if you want to open an IRIS terminal you need to use a command like "iris terminal <instance>". If that instance is on another machine, you'll have to use SSH. Starting with IRIS 2023.2, VS Code supports a WebSocket-based terminal so that you can launch a terminal on a remote server without needing SSH. The WebSocket terminal is not a full terminal though.
go to post Brett Saviano · Jul 13, 2023 @Sam Duncan Here's a simple method to export subclasses. It exports all of the classes in a single XML file and prints that to the console. You can easily modify that behavior by changing the $SYSTEM.OBJ.Export() line to whatever export strategy you want. ClassMethod ExportSubclasses(pSuper As %String) As %Status { #Dim tSC As %Status = $$$OK #Dim tEx As %Exception.AbstractException #Dim tPc As %ProcedureContext #Dim tRs As %SQL.ClassQueryResultSet Try { #; Build a subscripted array of subclasses Set tStmt = ##class(%SQL.Statement).%New() Set tSC = tStmt.%PrepareClassQuery("%Dictionary.ClassDefinitionQuery","SubclassOf") If $$$ISERR(tSC) Quit Set tPc = tStmt.%Execute(pSuper) If tPc.%SQLCODE < 0 { Throw ##class(%Exception.SQL).CreateFromSQLCODE(tPc.%SQLCODE,tPc.%Message) } Set tRs = tPc.%NextResult() While tRs.%Next(.tSC) { Set tSubclasses(tRs.%GetData(1)_".CLS") = "" } If $$$ISOK(tSC), $DATA(tSubclasses) = 10 { #; Export the subclasses Set tSC = $SYSTEM.OBJ.Export(.tSubclasses,,"/nodisplay") } } Catch tEx { Set tSC = tEx.AsStatus() } Quit tSC }
go to post Brett Saviano · Jun 16, 2023 Hi @Scott Roth, when 2023.2 is released VS Code will support an integrated WebSocket-based terminal that's implemented as a new Atelier API endpoint. It will be available in kits by default and the vscode-objectscript. It's documented here and the newest beta version of the vscode-objectscript extension and 2023.2 previews have the needed code.
go to post Brett Saviano · Jun 15, 2023 @Michael Gosselin The best place to report those issues is the GitHub repository for the Server Manager extension. Also, any details you can give us would be great. Does a server already exist with that name in your user settings? Do you have a workspace open? cc @John Murray
go to post Brett Saviano · Jun 15, 2023 InterSystems is working on adding support for XML import/export in the Atelier API with integration in the VS Code UI via commands. I will post the PR here when it's opened and a suitable kit is publicly available.
go to post Brett Saviano · May 22, 2023 @Evgeny Shvarov It's available on the VS Code Marketplace, which is where people would expect to find it.
go to post Brett Saviano · May 18, 2023 Hi @Michael Davidovich, I can show you how to configure VS Code to see system classes. Are you using client-side or server-side editing?
go to post Brett Saviano · May 17, 2023 Hi @Josef Zvonicek, I'm glad that VS Code is making you more productive, and thanks for the feedback. I have some comments about your fine-tuning list: The "override class members" functionality is implemented by the Language Server extension. If you file an issue on its GitHub repository I would be happy to consider this enhancement request. The VS Code integrated terminal is part of the core product, and not our extensions, so I'm not sure we can do anything about this. Can you provide more details about how you started the terminal and the expected vs actual behavior? Newer versions of the vscode-objectscript extension should avoid opening that extra copy of the file when debugging. If you're using recent version like 2.8.0 or 2.8.1 and this isn't working, please file a GitHub issue in that extension's repository and I will take a look at it. The debug console can only evaluate expressions. It's not a full terminal and cannot execute commands, so this isn't possible unfortunately. I'm not sure what a GIT disk is. Are you editing files on your local file system? Can you describe what doesn't work well, and what we could do to make things better? There is a command called "Open Error Location..." that you can execute from the command palette. It prompts you to enter a "label+offset^routine" string and then opens that location. It only works for INT routines though.