Skip to content

Commit 3d10347

Browse files
committed
go to realfile if exists
1 parent 7249b95 commit 3d10347

File tree

7 files changed

+68
-43
lines changed

7 files changed

+68
-43
lines changed

Diff for: CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- Show percent-member in outline
1010
- Multi-root workspace supported now, for different connections
1111
- Multi-root workspace also for server explorer
12+
- Go to definition now goes to real file if such presented, or opens from the server
1213

1314
## [0.7.7]
1415

Diff for: api/index.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import * as httpModule from 'http';
22
import * as httpsModule from 'https';
3-
import * as vscode from 'vscode';
4-
import { outputConsole, outputChannel } from '../utils';
5-
import { config, currentWorkspaceFolder } from '../extension';
6-
import { type } from 'os';
3+
import { outputConsole, currentWorkspaceFolder } from '../utils';
4+
import { config } from '../extension';
75

86
export class AtelierAPI {
97
private cookies: string[] = [];

Diff for: extension.ts

+1-14
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { DocumentContentProvider } from './providers/DocumentContentProvider';
2020
import { XmlContentProvider } from './providers/XmlContentProvider';
2121

2222
import { ObjectScriptExplorerProvider } from './explorer/explorer';
23-
import { outputChannel, outputConsole } from './utils';
23+
import { outputChannel, currentWorkspaceFolder } from './utils';
2424
import { AtelierAPI } from './api';
2525
export var explorerProvider: ObjectScriptExplorerProvider;
2626
export var documentContentProvider: DocumentContentProvider;
@@ -53,19 +53,6 @@ export function getXmlUri(uri: vscode.Uri): vscode.Uri {
5353
});
5454
}
5555

56-
export function currentWorkspaceFolder(): string {
57-
let workspaceFolder;
58-
if (vscode.window.activeTextEditor && vscode.window.activeTextEditor.document) {
59-
const uri = vscode.window.activeTextEditor.document.uri;
60-
if (uri.scheme === 'file') {
61-
workspaceFolder = vscode.workspace.getWorkspaceFolder(uri).name;
62-
} else if (uri.scheme.startsWith('objectscript')) {
63-
workspaceFolder = uri.authority;
64-
}
65-
}
66-
return workspaceFolder || workspaceState.get<string>('workspaceFolder');
67-
}
68-
6956
export async function activate(context: vscode.ExtensionContext): Promise<void> {
7057
const languages = require(context.asAbsolutePath('./package.json'))['contributes']['languages'].map(lang => lang.id);
7158
workspaceState = context.workspaceState;

Diff for: package-lock.json

+24-21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -420,5 +420,7 @@
420420
"vsce": "^1.53.2",
421421
"vscode": "^1.1.26"
422422
},
423-
"dependencies": {}
423+
"dependencies": {
424+
"glob": "^7.1.3"
425+
}
424426
}

Diff for: providers/DocumentContentProvider.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
11
import * as vscode from 'vscode';
22
import { AtelierAPI } from './../api';
3+
import * as glob from 'glob';
4+
import * as url from 'url';
35

4-
import { OBJECTSCRIPT_FILE_SCHEMA, workspaceState, currentWorkspaceFolder } from '../extension';
5-
const url = require('url');
6+
import { OBJECTSCRIPT_FILE_SCHEMA } from '../extension';
7+
import { currentWorkspaceFolder, workspaceFolderUri } from '../utils';
68

79
export class DocumentContentProvider implements vscode.TextDocumentContentProvider {
810
private onDidChangeEvent: vscode.EventEmitter<vscode.Uri> = new vscode.EventEmitter<vscode.Uri>();
911

1012
constructor() {}
1113

14+
static findAsFile(name: string, workspaceFolder: string) {
15+
let fileName = name.split('.');
16+
let fileExt = fileName.pop().toLowerCase();
17+
let root = workspaceFolderUri(workspaceFolder).path;
18+
let pattern = `/**/{${fileName.join('.')},${fileName.join('/')}}.${fileExt}`;
19+
let found = glob.sync(pattern, { root, nodir: true });
20+
return found.length ? found.pop() : null;
21+
}
22+
1223
public static getUri(name: string, workspaceFolder?: string, namespace?: string): vscode.Uri {
1324
workspaceFolder = workspaceFolder && workspaceFolder !== '' ? workspaceFolder : currentWorkspaceFolder();
25+
let found = this.findAsFile(name, workspaceFolder);
26+
if (found) {
27+
return vscode.Uri.file(found);
28+
}
1429
let uri = vscode.Uri.file(name).with({
1530
scheme: OBJECTSCRIPT_FILE_SCHEMA
1631
});
@@ -35,7 +50,8 @@ export class DocumentContentProvider implements vscode.TextDocumentContentProvid
3550
let query = url.parse(decodeURIComponent(uri.toString()), true).query;
3651
if (query) {
3752
if (query.ns && query.ns !== '') {
38-
api.setNamespace(query.ns);
53+
let namespace = query.ns.toString();
54+
api.setNamespace(namespace);
3955
}
4056
}
4157
api.setConnection(uri.authority);

Diff for: utils/index.ts

+18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as vscode from 'vscode';
22
import fs = require('fs');
33
import path = require('path');
4+
import { workspaceState } from '../extension';
45

56
export const outputChannel = vscode.window.createOutputChannel('ObjectScript');
67

@@ -69,3 +70,20 @@ export async function mkdirSyncRecursive(dirpath: string): Promise<string> {
6970
}
7071
});
7172
}
73+
74+
export function currentWorkspaceFolder(): string {
75+
let workspaceFolder;
76+
if (vscode.window.activeTextEditor && vscode.window.activeTextEditor.document) {
77+
const uri = vscode.window.activeTextEditor.document.uri;
78+
if (uri.scheme === 'file') {
79+
workspaceFolder = vscode.workspace.getWorkspaceFolder(uri).name;
80+
} else if (uri.scheme.startsWith('objectscript')) {
81+
workspaceFolder = uri.authority;
82+
}
83+
}
84+
return workspaceFolder || workspaceState.get<string>('workspaceFolder');
85+
}
86+
87+
export function workspaceFolderUri(workspaceFolder: string): vscode.Uri {
88+
return vscode.workspace.workspaceFolders.find(el => el.name === workspaceFolder).uri;
89+
}

0 commit comments

Comments
 (0)