InterSystems Namespace SearchStudio-style tools for working on InterSystems IRIS code in VS Code, directly on the server:
It works with the server-side ( Requirements
Namespace Search:
|
| You type | It opens |
|---|---|
SetTavla^WBLRSHOWFF |
routine WBLRSHOWFF at label SetTavla |
SetTavla+3^WBLRSHOWFF |
3 lines below that label |
$$call^My.Routine(x) |
$$ and the arguments are ignored |
^WBLRSHOWFF / ^WBLRSHOWFF.int |
the routine at the top, or that exact type |
+12^WBLRSHOWFF |
line 12 of the routine |
##class(My.App.Cls).Method |
the class, at that method |
My.App.Cls.cls |
the class, at the top |
SetTavla / SetTavla+3 |
a label in the current file |
42 |
line 42 of the current file |
With several namespaces open it asks which one to use. The current file's namespace is listed first, so Enter keeps you where you are.
Open Document (Tree / Flat)
Command: InterSystems: Open Document (Tree / Flat) (isfsNamespaceSearch.openDocument).
It has no default shortcut. To put it on Ctrl+Alt+O, add this to your keybindings.json:
{
"key": "ctrl+alt+o",
"command": "isfsNamespaceSearch.openDocument",
"when": "vscode-objectscript.connectActive"
}
It has two views of the namespace's documents:
- Tree: browse package by package, like the InterSystems ObjectScript extension did up to 3.8.2.
- Flat: one filterable list of every document, like 3.8.3 and later.
You can also type a full document name with its extension (e.g. My.App.Cls.cls) in either view and press Enter.
The title-bar buttons show or hide System, Generated and Mapped documents.
Opening several files at once
Click the checklist button in the title bar to turn on checkbox mode:
- Click a file, or press
Ctrl+Enteron the highlighted one, to tick it. Do the same again to untick it. - Ticks are kept when you move between packages and when you switch Tree / Flat, so you can collect files from anywhere.
- VS Code shows a checkbox on every row. Clicking a package or
..goes into it or up, rather than ticking it. - Press Enter (or OK) to open every ticked file, each in its own tab.
- The title shows how many files are ticked. Clicking the button again turns checkbox mode off and clears the ticks.
Keys while the picker is open
| Key | Action |
|---|---|
Ctrl+T (or your open shortcut again) |
Switch Tree / Flat |
Alt+Left |
Up one package |
Backspace (filter empty) |
Up one package |
Ctrl+H |
Back to the namespace root |
Ctrl+Enter (checkbox mode) |
Tick / untick the highlighted file |
These keys only work while this picker is open. Everywhere else they keep their usual VS Code behaviour.
Holding Backspace deletes your filter text and stops at the empty filter, so press it again to go up.
The ← and Home buttons in the title bar do the same as the keys and stay visible however far you scroll.
Switching Flat → Tree starts at the namespace root. Switching Tree → Flat keeps your filter text.
Copy as Code Block
Right-click in the editor > Copy as Code Block (light colors, for Outlook / Teams) copies the selection (or the current line when nothing is selected) the way it looks in InterSystems Default Light Modern, even when the editor uses a dark theme such as Monokai, in a light box with a border. Paste it into Outlook, Teams or Word.
- Colors come from the InterSystems Language Server's coloring of the document and the theme's own color for each kind of token, so they match that theme exactly. Other languages copy in the box without colors.
- In Outlook / Word the box is a bordered, shaded block of paragraphs (Word's own form for it, so Outlook keeps it). In Teams, pasted formatting is simplified; for a real Teams code block type ``` first, pick the language and paste.
- The code stays left-to-right in a right-to-left (Hebrew) message. Tabs become spaces, and the indentation all lines share is removed, so a method body starts at the left.
- The plain code goes on the clipboard too: pasting into a plain-text field, or into a Teams code block (type ``` first), gets just the code.
- Settings:
isfsNamespaceSearch.copyCode.theme(any installed theme by its label),.box,.background,.border,.fontSize,.dedent. No default key: bind Copy as Code Block in Keyboard Shortcuts if you like.
Bookmarks
Works in server-side (isfs) documents.
| Key | Action |
|---|---|
Ctrl+F2 |
Toggle a bookmark on the current line (on every cursor's line, with multiple cursors) |
F2 |
Jump to the next bookmark in this file (wraps around) |
Ctrl+Alt+F2 |
Clear this file's bookmarks |
These keys only apply in isfs documents. Elsewhere F2 is still Rename Symbol.
Bookmarked lines get a yellow marker in the gutter and on the scrollbar.
Notes. Right-click a bookmark in the sidebar (or click its pencil icon) → Edit Bookmark Note... to give it a
note. The note shows next to the bookmark (SetTavla+3 · check the VAT rounding), in full in its tooltip, and when you
hover the bookmarked line in the editor. From the editor, InterSystems: Edit Bookmark Note... in the Command
Palette works on the cursor's line (and bookmarks it if it isn't yet). An empty note removes it. Notes move with their
bookmark as you edit, and go when the bookmark goes.
The ISFS Bookmarks sidebar lists them by namespace → document → bookmark. Each bookmark shows its label and offset
(e.g. SetTavla+3, or the class method it's in) and its line number. Click one to jump there.
The buttons on each row delete one bookmark, clear a document, or clear a whole namespace.
Bookmarks follow the text. Adding or deleting lines above a bookmark moves it with its line, and editing the bookmarked line keeps it. Deleting the bookmarked line removes the bookmark. This only tracks edits made in VS Code. If a document changes elsewhere (in Studio, or on the server), a bookmark can end up on a different line.
Bookmarks are saved per workspace.
No preview tabs for server documents
A single click on an isfs document opens it as a regular tab rather than a preview tab (the one in italics that
the next file replaces). Turn this off with isfsNamespaceSearch.pinIsfsEditors. To get the same behaviour for all
files, use VS Code's own workbench.editor.enablePreview: false instead.
Code Log: Ctrl+Alt+L
Its own sidebar icon; Ctrl+Alt+L opens it. Keep notes about server-side code: which documents belong to a project and what each
document, label and method does.
- Folders and subfolders, to any depth: any name, in Hebrew, English or both. New Folder in the panel's title bar creates a top-level folder; the folder icon on a folder row (or right-click → New Subfolder) creates one inside it.
- Documents (
.cls,.mac,.int) sit in folders. Each has a title and a description. - Labels / methods / class methods sit under their document, also with a title and description.
Adding things
- Right-click in a server-side document → Add to Code Log.... If the cursor is inside a label or method, you can add that member or the whole document, then pick a folder and give it a title. Adding only lets you pick an existing folder or subfolder; create folders in the panel.
- In the panel: + on a folder adds documents with the Tree / Flat picker (checkbox mode works, so you can add several). + on a document lists its labels or methods to pick from.
- Drag documents or subfolders onto another folder (or a subfolder onto empty space to make it a project), or right-click → Move to Folder.... Copy to Folder... makes a copy instead, with all its notes. Projects themselves can't be moved or copied. Right-click → Remove or Rename as needed.
- In the tree, an entry with a title shows the title as its main text and the document or method name beside it.
Groups inside a document
A document with many logged labels / methods can be organised into groups:
- Right-click a document → New Group.... Groups have a name (Hebrew / English) and a description, like everything else.
- Put members in a group by dragging them onto it, or right-click a member → Move to Group... (which can also create a new group). Members not in a group are listed after the groups.
- Drag members onto each other to reorder them, onto a group to join it, or onto the document to take them out of their group. Drag groups onto each other to reorder groups. Members stay within their own document.
- Choose Members (the checklist icon on a group) lists the labels / methods you've already logged in that document: ticked ones are in the group. Tick to add, untick to take out (they stay logged, just ungrouped). Members in another group are marked "· in …"; ticking one moves it here. The last entry, Add labels / methods not logged yet..., picks new ones from the source straight into the group.
- Each group shows a count badge and collapses like a folder.
- Removing a group keeps its members: they just become ungrouped.
Expanding and collapsing
The Code Log opens with everything collapsed. Open rows one level at a time with their arrow. Closing a row also closes everything inside it, so the next time you open it you see one clean level. The title-bar Collapse All folds the whole tree.
Code Log panel
The sidebar has two sections: Projects (the tree) for organising and quick access, and the Code Log panel below it, which holds the log itself in two tabs.
Overview shows the whole log as a status tree. Each document and label / method shows its status dot, title and open to-dos; projects and folders roll up a small status bar and a count of open to-dos (☐). The project picker at the start of the filter row shows All projects or just one; the counts, tags and filters follow it. Filter by status with the chips, by ☐ open to-dos, or by # tags (a drop-down with a search box; tick one or more tags, and items with any of them show). A tagged folder, document or group shows everything inside it. Parents of a match stay visible. Click a row to open or close it; double-click it to show it in the Item tab.
Right-click a row for Go to Notes, Go to Info and Add a Tag… (any row), plus Change Status…, Add Journal Entry… and Add To-Do Entry… (documents and labels / methods).
Item shows the entry you selected in the tree (selecting switches to this tab):
- Header: the path (click any part to go up to it), an editable title, the status (click the badge: To check, In progress, Done, Needs fix, or none), a link that opens the code, and the tags. + tag adds one (existing tags are suggested), ✕ removes it, and double-clicking a tag renames it everywhere in the log.
- Notes: click to edit. Supports
-/*bullets,1.numbered lists,`code`and**bold**. - Journal: dated entries, newest first. Edit or delete (with undo) from the entry's hover buttons.
- To-do: add, tick, edit, drag to reorder, delete (with undo). Done items move to their own section.
- Info: clickable Document and Method cards that open the code, then group, folder, namespace, server (open / not open in your workspace), added and last edited. Documents with labels / methods list them there too (by group, with their type).
For projects, folders and groups, Info lists what's inside (subfolders and documents, or the group's members). Click a row to show it; ↗ opens the code.
Status, journal and to-dos are for documents and labels / methods. Projects, folders and groups have a name, notes and tags.
The top of the panel stays in place while you scroll: in Item the path, title, status, tags and sub-tabs; in Overview the filter row. Only the part below scrolls. (If the panel is very short, everything scrolls together instead.)
Changes save as you type. Text direction follows what you type, so Hebrew works as expected.
Going to the code
The Go to code arrow on a row (or the link / cards in the Code Log panel) opens the document, or the document at that label or method. Members are found by name when you click, so they still work after the code is edited. This only works while that server and namespace is open in your workspace. Otherwise the entry is greyed out and marked "(not open)", but it stays in the log.
Projects
Top-level folders are projects. They have their own icon and an emphasised name, so they stand out from subfolders.
Saving, export and import
The log is saved in VS Code on this computer. There are two kinds of export:
Tree export / import (Projects title bar and project rows) carries the structure plus titles and notes only.
- Export in the title bar saves the whole log as a JSON file.
- Export Project (the export icon on a project row, or right-click) saves just that project with its subfolders.
- Import in the title bar reads either kind of file:
- a single project shows a checklist of its subfolders and documents, all ticked, each marked new or already exists. Untick what you don't want. If some ticked ones already exist, a second list asks which to replace; unticked ones are merged into yours;
- a file with several projects (e.g. a whole-log export) shows the same kind of checklist for its projects.
- Replacing never loses your status, tags, journal or to-dos on documents that stay; those come only from a log export.
Log export / import (the Code Log panel title bar) carries everything: title, notes, status, tags, journal and to-dos.
- Export Log asks for all projects or one project.
- Import Log creates any missing projects, folders, documents, groups and labels / methods in the tree. If some items already have a log of their own, it asks once: Overwrite all, Keep mine, or Choose… (a checklist).
Without files (handy on servers or over RDP)
- Every export asks Save to file… or Copy to clipboard.
- Every import asks From clipboard, Paste JSON… (an empty tab to paste into, with an Import button at its top right) or From file…. Copy the JSON text (Ctrl+C); a file copied in Explorer can't be read from the clipboard, but a copied file path (Explorer's "Copy as path") is read as that file.
- Drop a
.jsonexport (or dragged JSON text) onto the Projects tree to import it. - Either import button takes either kind of export: a Code Log export given to Import (or a Projects export given to Import Log) runs the right import.
File dialogs open on your Desktop and save to / read from your own computer.
Settings
| Setting | Default | What it does |
|---|---|---|
isfsNamespaceSearch.useServerSideSearch |
true |
Search on the IRIS server (fast). Off = always use the local scan. |
isfsNamespaceSearch.serverSideSearchMinApiVersion |
4 |
Servers below this Atelier API version use the local scan, for complete results. |
isfsNamespaceSearch.serverSearchMaxResults |
5000 |
Maximum matches requested per server-side search (the API's own default is 200). |
isfsNamespaceSearch.allowSelfSignedCert |
false |
Accept a self-signed HTTPS certificate when talking to the server directly. Only for trusted dev servers. |
isfsNamespaceSearch.dirConcurrency |
6 |
Local scan: folder listings run in parallel. |
isfsNamespaceSearch.fileConcurrency |
8 |
Local scan: files read in parallel. |
isfsNamespaceSearch.pauseBetweenReadsMs |
0 |
Local scan: delay before each server read, to go easier on a busy server. |
isfsNamespaceSearch.openDocument.defaultMode |
last |
Which view Open Document starts in: last, tree or flat. |
isfsNamespaceSearch.pinIsfsEditors |
true |
Open isfs documents as regular tabs, not preview tabs. |
Credentials
This extension never asks for a password and never shows VS Code's "wants to sign in" dialog.
Open Document lists documents through your isfs namespace folder, using the connection the InterSystems extension
already made when you added the namespace. It needs no password of its own.
The flat list has to go through the folder one package at a time, so on a big namespace it fills in over a few seconds.
It's then kept for 3 minutes; the Reload button in the title bar refreshes it.
Server-side search, and a faster Open Document flat list, need to talk to the server directly. They use a password when one is available without asking:
settings.json(intersystems.servers), or whatever the InterSystems ObjectScript extension provides. On 3.0.x that includes the password you typed for Add Server Namespace to Workspace.- Server Manager's saved login, if you've allowed this extension to use it: Accounts menu → InterSystems Server Credentials → your login → Manage Trusted Extensions → tick InterSystems Namespace Search.
Without one, search uses the slower local scan and Open Document uses the isfs folder. Both still work.
InterSystems: Forget Stored Password... removes a password saved by versions 1.4.1 and 1.4.2.
Credits
Open Document's list queries and name validation are adapted from the
InterSystems ObjectScript extension (MIT).
See THIRD_PARTY_NOTICES.md.