Skip to content

Commit a3980d6

Browse files
committed
Merge branch 'master' of github.com:intersystems-community/vscode-objectscript
2 parents acf6dac + d104ad1 commit a3980d6

File tree

14 files changed

+204
-113
lines changed

14 files changed

+204
-113
lines changed

.github/workflows/main.yml

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ on:
55
branches:
66
- master
77
paths-ignore:
8+
- 'docs/**'
9+
- '.vscode/**'
10+
- '.github/**'
811
- '*.md'
912
- '**/*.md'
1013
pull_request:
@@ -21,7 +24,9 @@ jobs:
2124
matrix:
2225
os: [ubuntu-latest, windows-latest, macOS-latest]
2326
steps:
24-
- uses: actions/checkout@master
27+
- uses: actions/checkout@v2
28+
with:
29+
ref: master
2530
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
2631
- name: Set an output
2732
id: set-version
@@ -45,7 +50,7 @@ jobs:
4550
echo $VERSION > ./dist/.version
4651
echo $NAME > ./dist/.name
4752
- name: Use Node.js
48-
uses: actions/setup-node@master
53+
uses: actions/setup-node@v1
4954
with:
5055
node-version: 12.x
5156
- run: npm install
@@ -61,7 +66,7 @@ jobs:
6166
if: runner.os == 'Linux'
6267
run: |
6368
./node_modules/.bin/vsce package -o ./dist/package.vsix
64-
- uses: actions/upload-artifact@master
69+
- uses: actions/upload-artifact@v2
6570
if: runner.os == 'Linux'
6671
with:
6772
name: vsix
@@ -71,7 +76,7 @@ jobs:
7176
runs-on: ubuntu-latest
7277
needs: build
7378
steps:
74-
- uses: actions/download-artifact@master
79+
- uses: actions/download-artifact@v2
7580
with:
7681
name: vsix
7782
path: ./dist/
@@ -84,7 +89,7 @@ jobs:
8489
echo ::set-output name=name::`cat ./dist/.name`
8590
- name: Create Release
8691
id: create_release
87-
uses: actions/create-release@master
92+
uses: actions/create-release@v1
8893
if: runner.os == 'Linux'
8994
env:
9095
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -97,7 +102,7 @@ jobs:
97102
${{ steps.set-version.outputs.changelog }}
98103
- name: Upload Release Asset
99104
id: upload-release-asset
100-
uses: actions/upload-release-asset@master
105+
uses: actions/upload-release-asset@v1
101106
if: runner.os == 'Linux'
102107
env:
103108
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -114,12 +119,13 @@ jobs:
114119
- uses: actions/checkout@v2
115120
with:
116121
ref: master
117-
- uses: actions/download-artifact@master
122+
token: ${{ secrets.TOKEN }}
123+
- uses: actions/download-artifact@v2
118124
with:
119125
name: vsix
120126
path: ./dist/
121127
- name: Use Node.js
122-
uses: actions/setup-node@master
128+
uses: actions/setup-node@v1
123129
with:
124130
node-version: 12.x
125131
- name: Prepare build
@@ -137,11 +143,10 @@ jobs:
137143
jq --arg version "$VERSION" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json
138144
jq '.enableProposedApi = false' package.json > "$tmp" && mv "$tmp" package.json
139145
npm install
140-
npm i -g vsce ovsx
141146
git push
142147
- name: Upload Release Asset
143148
id: upload-release-asset
144-
uses: actions/upload-release-asset@master
149+
uses: actions/upload-release-asset@v1
145150
if: runner.os == 'Linux'
146151
env:
147152
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -152,6 +157,6 @@ jobs:
152157
asset_content_type: application/zip
153158
- name: Publish to Marketplaces
154159
run: |
155-
vsce publish -p ${{ secrets.VSCE_TOKEN }}
156-
ovsx publish --pat ${{ secrets.OVSX_TOKEN }}
160+
./node_modules/.bin/vsce publish -p ${{ secrets.VSCE_TOKEN }}
161+
./node_modules/.bin/ovsx publish --pat ${{ secrets.OVSX_TOKEN }}
157162

README.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,19 @@ We recommend you define server connections in the `intersystems.servers` object
4343
"host": "127.0.0.1",
4444
"port": 52773
4545
},
46-
"description": "My local IRIS",
47-
"username": "me"
46+
"description": "My local IRIS",
47+
"username": "me"
4848
}
4949
}
5050
```
51-
Setting the `username` property is optional. If omitted it will be prompted for when connecting.
5251

53-
By defining connections in your User Settings they become available for use by any workspace you open in VSCode.
52+
By defining connections in your User Settings they become available for use by any workspace you open in VSCode. Alternatively, define them in workspace-specific settings.
53+
54+
Setting the `username` property is optional. If omitted it will be prompted for when connecting, then cached for the session..
55+
56+
Setting a plaintext value for the `password` property is not recommended. Instead, run the `InterSystems Server Manager: Store Password in Keychain` command from Command Palette.
57+
58+
If no password has been set or stored it will be prompted for when connecting, then cached for the session.
5459

5560
### Client-side Editing
5661

@@ -66,7 +71,9 @@ We recommend that `objectscript.conn` uses its `server` property to point to an
6671
}
6772
```
6873

69-
The mandatory `ns` property defines which server namespace you will work with. If `username` is set here it overrides that setting from the `intersystems.servers` entry.
74+
The mandatory `ns` property defines which server namespace you will work with.
75+
76+
When the `server` property is set, any `username` or `password` properties of `objectscript.conn` are ignored. Instead these values come from the `intersystems.servers` entry.
7077

7178
### Server-side Editing
7279

package-lock.json

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"onCommand:vscode-objectscript.explorer.refresh",
5858
"onCommand:vscode-objectscript.explorer.openClass",
5959
"onCommand:vscode-objectscript.explorer.openRoutine",
60+
"onCommand:vscode-objectscript.explorer.openCSPFile",
6061
"onCommand:vscode-objectscript.compileFolder",
6162
"onCommand:vscode-objectscript.importFolder",
6263
"onLanguage:objectscript",
@@ -160,11 +161,11 @@
160161
"view/item/context": [
161162
{
162163
"command": "vscode-objectscript.explorer.export",
163-
"when": "view == ObjectScriptExplorer && viewItem =~ /^dataNode:/"
164+
"when": "view == ObjectScriptExplorer && viewItem =~ /^dataNode:(?!(cspApplication|cspFileNode))/"
164165
},
165166
{
166167
"command": "vscode-objectscript.explorer.export",
167-
"when": "view == ObjectScriptExplorer && viewItem =~ /^dataRootNode:/"
168+
"when": "view == ObjectScriptExplorer && viewItem =~ /^dataRootNode:(?!cspRootNode)/"
168169
},
169170
{
170171
"command": "vscode-objectscript.explorer.delete",
@@ -185,28 +186,32 @@
185186
{
186187
"command": "vscode-objectscript.explorer.otherNamespace",
187188
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode((?!:extra:).)*$/",
188-
"group": "inline"
189+
"group": "inline@30"
189190
},
190191
{
191192
"command": "vscode-objectscript.explorer.otherNamespaceClose",
192-
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode:extra:/",
193-
"group": "inline"
193+
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode.*:extra:/",
194+
"group": "inline@30"
194195
},
195196
{
196197
"command": "vscode-objectscript.explorer.showGenerated",
197-
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode((?!:generated:).)*$/"
198+
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode((?!:generated:).)*$/",
199+
"group": "inline@20"
198200
},
199201
{
200202
"command": "vscode-objectscript.explorer.hideGenerated",
201-
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode.*:generated:/"
203+
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode.*:generated:/",
204+
"group": "inline@20"
202205
},
203206
{
204207
"command": "vscode-objectscript.explorer.showSystem",
205-
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode((?!:(%SYS|system):).)*$/"
208+
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode((?!:(%SYS|system):).)*$/",
209+
"group": "inline@10"
206210
},
207211
{
208212
"command": "vscode-objectscript.explorer.hideSystem",
209-
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode.*:system:/"
213+
"when": "view == ObjectScriptExplorer && viewItem =~ /^serverNode.*:system:/",
214+
"group": "inline@10"
210215
}
211216
],
212217
"editor/context": [
@@ -408,31 +413,37 @@
408413
{
409414
"command": "vscode-objectscript.explorer.otherNamespace",
410415
"title": "View Another Namespace...",
416+
"icon": "$(add)",
411417
"category": "ObjectScript"
412418
},
413419
{
414420
"command": "vscode-objectscript.explorer.showGenerated",
415-
"title": "Show Generated",
421+
"title": "Show Generated Items",
422+
"icon": "$(server-process)",
416423
"category": "ObjectScript"
417424
},
418425
{
419426
"command": "vscode-objectscript.explorer.hideGenerated",
420-
"title": "Hide Generated",
427+
"title": "Hide Generated Items",
428+
"icon": "$(server-process)",
421429
"category": "ObjectScript"
422430
},
423431
{
424432
"command": "vscode-objectscript.explorer.showSystem",
425-
"title": "Show System",
433+
"title": "Show System Items",
434+
"icon": "$(library)",
426435
"category": "ObjectScript"
427436
},
428437
{
429438
"command": "vscode-objectscript.explorer.hideSystem",
430-
"title": "Hide System",
439+
"title": "Hide System Items",
440+
"icon": "$(library)",
431441
"category": "ObjectScript"
432442
},
433443
{
434444
"command": "vscode-objectscript.explorer.otherNamespaceClose",
435445
"title": "Close Namespace",
446+
"icon": "$(remove)",
436447
"category": "ObjectScript"
437448
},
438449
{
@@ -882,6 +893,7 @@
882893
"minimist": ">=1.2.5",
883894
"mocha": "^8.0.1",
884895
"nock": "^13.0.0",
896+
"ovsx": "latest",
885897
"prettier": "^2.0.5",
886898
"tape": "^5.0.1",
887899
"ts-loader": "^7.0.5",

src/commands/compile.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ async function compileFlags(): Promise<string> {
2828
});
2929
}
3030

31-
export async function checkChangedOnServer(file: CurrentFile): Promise<number> {
31+
export async function checkChangedOnServer(file: CurrentFile, force = false): Promise<number> {
3232
if (!file || !file.uri || schemas.includes(file.uri.scheme)) {
3333
return -1;
3434
}
@@ -41,8 +41,11 @@ export async function checkChangedOnServer(file: CurrentFile): Promise<number> {
4141
.then(({ ts, content }) => {
4242
const fileContent = file.content.split(/\r?\n/);
4343
const serverTime = Number(new Date(ts + "Z"));
44-
const sameContent = content.every((line, index) => line.trim() == (fileContent[index] || "").trim());
45-
const mtime = sameContent ? serverTime : Math.max(Number(fs.statSync(file.fileName).mtime), serverTime);
44+
const sameContent = force
45+
? false
46+
: content.every((line, index) => line.trim() == (fileContent[index] || "").trim());
47+
const mtime =
48+
force || sameContent ? serverTime : Math.max(Number(fs.statSync(file.fileName).mtime), serverTime);
4649
return mtime;
4750
})
4851
.catch(() => -1));
@@ -54,6 +57,7 @@ async function importFile(file: CurrentFile, ignoreConflict?: boolean): Promise<
5457
const api = new AtelierAPI(file.uri);
5558
const content = file.content.split(/\r?\n/);
5659
const mtime = await checkChangedOnServer(file);
60+
workspaceState.update(`${file.uniqueId}:mtime`, undefined);
5761
ignoreConflict = ignoreConflict || mtime < 0;
5862
return api
5963
.putDoc(
@@ -65,6 +69,9 @@ async function importFile(file: CurrentFile, ignoreConflict?: boolean): Promise<
6569
},
6670
ignoreConflict
6771
)
72+
.then(() => {
73+
checkChangedOnServer(file, true);
74+
})
6875
.catch((error) => {
6976
if (error.statusCode == 400) {
7077
outputChannel.appendLine(error.error.result.status);

src/explorer/explorer.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ export class ObjectScriptExplorerProvider implements vscode.TreeDataProvider<Nod
2424
.then((data) => data.result.content.namespaces)
2525
.then((data) => data.filter((ns) => ns !== api.ns && !extra4Workspace.includes(ns)))
2626
.then((data) => data.map((ns) => ({ label: ns })))
27-
.then(vscode.window.showQuickPick)
27+
.then((data) =>
28+
vscode.window.showQuickPick(data, {
29+
placeHolder: `Choose a namespace on ${api.config.host}:${api.config.port} to add to ObjectScript Explorer`,
30+
})
31+
)
2832
.then((ns) => this.showExtra4Workspace(workspaceFolder, ns.label));
2933
}
3034

@@ -73,11 +77,14 @@ export class ObjectScriptExplorerProvider implements vscode.TreeDataProvider<Nod
7377
const conn: any = config("conn", workspaceFolder.name);
7478
if (conn.active && conn.ns) {
7579
const extra4Workspace = this._showExtra4Workspace[workspaceFolder.name] || [];
76-
node = new WorkspaceNode(workspaceFolder.name, this._onDidChangeTreeData, {});
80+
node = new WorkspaceNode(workspaceFolder.name, this._onDidChangeTreeData, {
81+
workspaceFolder: workspaceFolder.name,
82+
});
7783
rootNodes.push(node);
7884

7985
extra4Workspace.forEach((ns) => {
8086
node = new WorkspaceNode(workspaceFolder.name, this._onDidChangeTreeData, {
87+
workspaceFolder: workspaceFolder.name,
8188
namespace: ns,
8289
extraNode: true,
8390
});

src/explorer/models/cspFileNode.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as vscode from "vscode";
2+
import { DocumentContentProvider } from "../../providers/DocumentContentProvider";
3+
import { NodeBase, NodeOptions } from "./nodeBase";
4+
5+
export class CSPFileNode extends NodeBase {
6+
public static readonly contextValue: string = "dataNode:cspFileNode";
7+
public constructor(label: string, fullName: string, options: NodeOptions) {
8+
super(label, fullName, options);
9+
}
10+
11+
public getTreeItem(): vscode.TreeItem {
12+
const displayName: string = this.label;
13+
14+
return {
15+
collapsibleState: vscode.TreeItemCollapsibleState.None,
16+
command: {
17+
arguments: [DocumentContentProvider.getUri(this.fullName, this.workspaceFolder, this.namespace)],
18+
command: "vscode-objectscript.explorer.openCSPFile",
19+
title: "Open File",
20+
},
21+
contextValue: CSPFileNode.contextValue,
22+
label: `${displayName}`,
23+
};
24+
}
25+
}

src/explorer/models/rootNode.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { PackageNode } from "./packageNode";
55
import { RoutineNode } from "./routineNode";
66
import { AtelierAPI } from "../../api";
77
import { ClassNode } from "./classesNode";
8+
import { CSPFileNode } from "./cspFileNode";
89
import { StudioOpenDialog } from "../../queries";
910

1011
export class RootNode extends NodeBase {
@@ -119,17 +120,18 @@ export class RootNode extends NodeBase {
119120
case "9":
120121
return new PackageNode(el.Name, el.fullName, category, this.options);
121122
case "4":
122-
case "5":
123123
case "100":
124124
return new ClassNode(el.Name, el.fullName, this.options);
125+
case "5":
126+
return new CSPFileNode(el.Name, el.fullName, this.options);
125127
case "0":
126128
case "1":
127129
case "2":
128130
case "3":
129131
case "11":
130132
return new RoutineNode(el.Name, el.fullName, this.options);
131133
case "10":
132-
return new RootNode(el.Name, el.fullName, "dataNode:CSPApplication", this._category, this.options, true);
134+
return new RootNode(el.Name, el.fullName, "dataNode:cspApplication", this._category, this.options, true);
133135
default:
134136
return null;
135137
}

0 commit comments

Comments
 (0)