Skip to content

Commit 791d60e

Browse files
committed
temp
1 parent db5b100 commit 791d60e

File tree

5 files changed

+222
-5
lines changed

5 files changed

+222
-5
lines changed

.vscode/launch.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,22 @@
1010
"type": "extensionHost",
1111
"request": "launch",
1212
"args": ["--extensionDevelopmentPath=${workspaceFolder}"],
13-
"outFiles": ["${workspaceFolder}/out/**/*.js"],
14-
"preLaunchTask": "Build"
13+
"outFiles": [
14+
// "${workspaceFolder:sa-vscode}/out/**/*.js",
15+
// "${workspaceFolder:source-lsp}/dist/**/*.js"
16+
"${workspaceFolder}/out/**/*.js"
17+
],
18+
"preLaunchTask": "Build",
19+
},
20+
{
21+
"type": "node",
22+
"request": "attach",
23+
"name": "Attach to Server 6009",
24+
"address": "localhost",
25+
"protocol": "inspector",
26+
"port": 6009,
27+
"sourceMaps": true,
28+
"outFiles": ["${workspaceRoot:source-lsp}/dist/**/*.js"]
1529
}
1630
]
1731
}

.vscode/tasks.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44
{
55
"label": "Build",
66
"type": "shell",
7-
"command": "yarn run build",
7+
"command": "yarn",
8+
"args": ["build"],
9+
"options": {
10+
"cwd": "${workspaceFolder}"
11+
},
812
"group": {
913
"kind": "build",
1014
"isDefault": true
1115
},
1216
"presentation": {
1317
"reveal": "never",
1418
"panel": "shared"
15-
}
19+
},
20+
"problemMatcher": []
1621
}
1722
]
1823
}

src/extension.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import * as vscode from "vscode";
44
import { setupTreeView } from "./view/test";
55
import { setupStatusBar } from "./statusbar/status";
6-
import { evalEditor } from "./commands/evalEditor";
76
import { registerAllCommands } from "./commands";
87
import { activateLspClient, deactivateLspClient } from "./lsp/client";
98
import { LanguageClient } from "vscode-languageclient/node";

src/lsp/client.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,15 @@ let client: LanguageClient;
1414
// const SECTION = "\u00A7";
1515

1616
export function activateLspClient(context: ExtensionContext) {
17+
console.log("Activating Source Language Server...");
1718
// The server is implemented in node
1819
const serverModule = context.asAbsolutePath(
1920
path.join("out", "source-lsp.js"),
2021
);
22+
console.error("=======================");
23+
console.error(serverModule);
24+
25+
let debugOptions = { execArgv: ["--nolazy", "--inspect=6009"] };
2126

2227
// If the extension is launched in debug mode then the debug server options are used
2328
// Otherwise the run options are used
@@ -26,6 +31,7 @@ export function activateLspClient(context: ExtensionContext) {
2631
debug: {
2732
module: serverModule,
2833
transport: TransportKind.ipc,
34+
options: debugOptions,
2935
},
3036
};
3137

src/view/test.ts

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
import * as vscode from "vscode";
2+
import * as fs from "fs";
3+
import * as path from "path";
4+
5+
export function setupTreeView() {
6+
const rootPath =
7+
vscode.workspace.workspaceFolders &&
8+
vscode.workspace.workspaceFolders.length > 0
9+
? vscode.workspace.workspaceFolders[0].uri.fsPath
10+
: undefined;
11+
console.log("Creating tree view");
12+
vscode.window.createTreeView("nodeDependencies", {
13+
treeDataProvider: new NodeDependenciesProvider(
14+
"/home/heyzec/Documents/NUS/FYP/sa-vscode",
15+
),
16+
});
17+
}
18+
19+
const hardcode = [
20+
["Rune Trials", "Apr 01, 2025, 9:00 PM"],
21+
["Rune Reading", "Apr 02, 2025, 9:00 PM"],
22+
["Beyond the Second Dimension", "Apr 03, 2025, 9:00 PM"],
23+
["Curve Introduction", "Apr 04, 2025, 9:00 PM"],
24+
["Curve Manipulation", "Apr 05, 2025, 9:00 PM"],
25+
["Beyond the First Dimension", "Apr 06, 2025, 9:00 PM"],
26+
["Premorseal Communications", "Apr 07, 2025, 9:00 PM"],
27+
["POTS and Pans", "Apr 08, 2025, 9:00 PM"],
28+
["Musical Diversions", "Apr 09, 2025, 11:00 PM"],
29+
["Search and Rescue", "Apr 10, 2025, 11:00 PM"],
30+
["Sorting Things Out", "Apr 11, 2025, 11:00 PM"],
31+
["Robotic Trials", "Apr 12, 2025, 11:00 PM"],
32+
["Moving about on Planet Y", "Apr 13, 2025, 7:00 PM"],
33+
["Finding ELDRIC", "Apr 14, 2025, 7:00 PM"],
34+
["Know Your Environment", "Apr 15, 2025, 7:00 PM"],
35+
["Corrective Sky Surgery", "Apr 16, 2025, 7:00 PM"],
36+
["Reuse Your Pairs", "Apr 17, 2025, 7:00 PM"],
37+
["Streaming the Anomaly", "Apr 18, 2025, 7:00 PM"],
38+
["The Anomaly in Focus", "Apr 19, 2025, 7:00 PM"],
39+
["The Essence of the Source", "Apr 20, 2025, 7:00 PM"],
40+
];
41+
export class NodeDependenciesProvider
42+
implements vscode.TreeDataProvider<Dependency | DependencyFolder>
43+
{
44+
constructor(private workspaceRoot: string) {}
45+
46+
// impl
47+
getTreeItem(element: Dependency): vscode.TreeItem {
48+
return element;
49+
}
50+
51+
// impl
52+
getChildren(
53+
element?: Dependency,
54+
): Thenable<(Dependency | DependencyFolder)[]> {
55+
if (!element) {
56+
return Promise.resolve([
57+
new DependencyFolder(
58+
"Missions",
59+
"",
60+
vscode.TreeItemCollapsibleState.Expanded,
61+
),
62+
new DependencyFolder(
63+
"Quests",
64+
"",
65+
vscode.TreeItemCollapsibleState.Collapsed,
66+
),
67+
new DependencyFolder(
68+
"Path",
69+
"",
70+
vscode.TreeItemCollapsibleState.Collapsed,
71+
),
72+
]);
73+
}
74+
return Promise.resolve(
75+
hardcode.map(
76+
(entry) =>
77+
new Dependency(
78+
entry[0],
79+
entry[1],
80+
vscode.TreeItemCollapsibleState.None,
81+
),
82+
),
83+
);
84+
85+
// console.log("Attempt to child")
86+
// if (!this.workspaceRoot) {
87+
// vscode.window.showInformationMessage("No dependency in empty workspace");
88+
// return Promise.resolve([]);
89+
// }
90+
91+
// if (element) {
92+
// return Promise.resolve(
93+
// this.getDepsInPackageJson(
94+
// path.join(
95+
// this.workspaceRoot,
96+
// "node_modules",
97+
// element.label,
98+
// "package.json",
99+
// ),
100+
// ),
101+
// );
102+
// } else {
103+
// const packageJsonPath = path.join(this.workspaceRoot, "package.json");
104+
// if (this.pathExists(packageJsonPath)) {
105+
// return Promise.resolve(this.getDepsInPackageJson(packageJsonPath));
106+
// } else {
107+
// vscode.window.showInformationMessage("Workspace has no package.json");
108+
// return Promise.resolve([]);
109+
// }
110+
// }
111+
}
112+
113+
/**
114+
* Given the path to package.json, read all its dependencies and devDependencies.
115+
*/
116+
private getDepsInPackageJson(packageJsonPath: string): Dependency[] {
117+
if (this.pathExists(packageJsonPath)) {
118+
const toDep = (moduleName: string, version: string): Dependency => {
119+
if (
120+
this.pathExists(
121+
path.join(this.workspaceRoot, "node_modules", moduleName),
122+
)
123+
) {
124+
return new Dependency(
125+
moduleName,
126+
version,
127+
vscode.TreeItemCollapsibleState.Collapsed,
128+
);
129+
} else {
130+
return new Dependency(
131+
moduleName,
132+
version,
133+
vscode.TreeItemCollapsibleState.None,
134+
);
135+
}
136+
};
137+
138+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
139+
140+
const deps = packageJson.dependencies
141+
? Object.keys(packageJson.dependencies).map((dep) =>
142+
toDep(dep, packageJson.dependencies[dep]),
143+
)
144+
: [];
145+
const devDeps = packageJson.devDependencies
146+
? Object.keys(packageJson.devDependencies).map((dep) =>
147+
toDep(dep, packageJson.devDependencies[dep]),
148+
)
149+
: [];
150+
return deps.concat(devDeps);
151+
} else {
152+
return [];
153+
}
154+
}
155+
156+
private pathExists(p: string): boolean {
157+
try {
158+
fs.accessSync(p);
159+
} catch (err) {
160+
return false;
161+
}
162+
return true;
163+
}
164+
}
165+
166+
class DependencyFolder extends vscode.TreeItem {
167+
constructor(
168+
public readonly label: string,
169+
private version: string,
170+
public readonly collapsibleState: vscode.TreeItemCollapsibleState,
171+
) {
172+
super(label, collapsibleState);
173+
this.tooltip = `${this.label}-${this.version}`;
174+
this.description = this.version;
175+
}
176+
177+
iconPath = {
178+
light: path.join(__filename, "..", "..", "assets", "icon.png"),
179+
dark: path.join(__filename, "..", "..", "assets", "icon.png"),
180+
};
181+
}
182+
183+
class Dependency extends vscode.TreeItem {
184+
constructor(
185+
public readonly label: string,
186+
private version: string,
187+
public readonly collapsibleState: vscode.TreeItemCollapsibleState,
188+
) {
189+
super(label, collapsibleState);
190+
this.tooltip = `${this.label}-${this.version}`;
191+
this.description = this.version;
192+
}
193+
}

0 commit comments

Comments
 (0)