Skip to content

Commit 6342090

Browse files
committed
Move session file functions to session from utils
1 parent 3c9fd5c commit 6342090

File tree

6 files changed

+55
-58
lines changed

6 files changed

+55
-58
lines changed

src/features/DebugSession.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import { NotificationType, RequestType } from "vscode-languageclient";
88
import { LanguageClient } from "vscode-languageclient/node";
99
import { getPlatformDetails, OperatingSystem } from "../platform";
1010
import { PowerShellProcess} from "../process";
11-
import { SessionManager, SessionStatus } from "../session";
11+
import { IEditorServicesSessionDetails, SessionManager, SessionStatus } from "../session";
1212
import Settings = require("../settings");
13-
import utils = require("../utils");
1413
import { Logger } from "../logging";
1514
import { LanguageClientConsumer } from "../languageClientConsumer";
1615

@@ -25,8 +24,7 @@ export class DebugSessionFeature extends LanguageClientConsumer
2524

2625
private sessionCount: number = 1;
2726
private tempDebugProcess: PowerShellProcess;
28-
private tempDebugEventHandler: vscode.Disposable;
29-
private tempSessionDetails: utils.IEditorServicesSessionDetails;
27+
private tempSessionDetails: IEditorServicesSessionDetails;
3028

3129
constructor(context: ExtensionContext, private sessionManager: SessionManager, private logger: Logger) {
3230
super();
@@ -314,12 +312,11 @@ export class DebugSessionFeature extends LanguageClientConsumer
314312
const sessionFilePath = this.sessionManager.getDebugSessionFilePath();
315313

316314
if (config.createTemporaryIntegratedConsole) {
317-
// TODO: This should be cleaned up to support multiple temporary consoles.
318315
this.tempDebugProcess = this.sessionManager.createDebugSessionProcess(sessionFilePath, settings);
319316
this.tempSessionDetails = await this.tempDebugProcess.start(`DebugSession-${this.sessionCount++}`);
320-
await utils.writeSessionFile(sessionFilePath, this.tempSessionDetails);
317+
await this.sessionManager.writeSessionFile(sessionFilePath, this.tempSessionDetails);
321318
} else {
322-
await utils.writeSessionFile(sessionFilePath, this.sessionManager.getSessionDetails());
319+
await this.sessionManager.writeSessionFile(sessionFilePath, this.sessionManager.getSessionDetails());
323320
}
324321

325322
return config;

src/features/PesterTests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class PesterTestsFeature implements vscode.Disposable {
131131
vscode.commands.executeCommand("PowerShell.ShowSessionConsole", true);
132132

133133
// Write out temporary debug session file
134-
await utils.writeSessionFile(
134+
await this.sessionManager.writeSessionFile(
135135
this.sessionManager.getDebugSessionFilePath(),
136136
this.sessionManager.getSessionDetails());
137137

src/features/RunCode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export class RunCodeFeature implements vscode.Disposable {
4444
await vscode.commands.executeCommand("PowerShell.ShowSessionConsole", true);
4545

4646
// Write out temporary debug session file
47-
await utils.writeSessionFile(
47+
await this.sessionManager.writeSessionFile(
4848
this.sessionManager.getDebugSessionFilePath(),
4949
this.sessionManager.getSessionDetails());
5050

src/process.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import vscode = require("vscode");
88
import { Logger } from "./logging";
99
import Settings = require("./settings");
1010
import utils = require("./utils");
11+
import { IEditorServicesSessionDetails, SessionManager } from "./session";
1112

1213
export class PowerShellProcess {
13-
public static escapeSingleQuotes(pspath: string): string {
14-
return pspath.replace(new RegExp("'", "g"), "''");
14+
public static escapeSingleQuotes(psPath: string): string {
15+
return psPath.replace(new RegExp("'", "g"), "''");
1516
}
1617

1718
// This is used to warn the user that the extension is taking longer than expected to startup.
@@ -36,7 +37,7 @@ export class PowerShellProcess {
3637
this.onExited = this.onExitedEmitter.event;
3738
}
3839

39-
public async start(logFileName: string): Promise<utils.IEditorServicesSessionDetails> {
40+
public async start(logFileName: string): Promise<IEditorServicesSessionDetails> {
4041
const editorServicesLogPath = this.log.getLogFilePath(logFileName);
4142

4243
const psesModulePath =
@@ -99,7 +100,7 @@ export class PowerShellProcess {
99100
" PowerShell Editor Services args: " + startEditorServices);
100101

101102
// Make sure no old session file exists
102-
utils.deleteSessionFile(this.sessionFilePath);
103+
SessionManager.deleteSessionFile(this.sessionFilePath);
103104

104105
// Launch PowerShell in the integrated terminal
105106
const terminalOptions: vscode.TerminalOptions = {
@@ -149,7 +150,7 @@ export class PowerShellProcess {
149150

150151
public dispose() {
151152
// Clean up the session file
152-
utils.deleteSessionFile(this.sessionFilePath);
153+
SessionManager.deleteSessionFile(this.sessionFilePath);
153154

154155
if (this.consoleCloseSubscription) {
155156
this.consoleCloseSubscription.dispose();
@@ -189,7 +190,7 @@ export class PowerShellProcess {
189190
return true;
190191
}
191192

192-
private async waitForSessionFile(): Promise<utils.IEditorServicesSessionDetails> {
193+
private async waitForSessionFile(): Promise<IEditorServicesSessionDetails> {
193194
// Determine how many tries by dividing by 2000 thus checking every 2 seconds.
194195
const numOfTries = this.sessionSettings.developer.waitForSessionFileTimeoutSeconds / 2;
195196
const warnAt = numOfTries - PowerShellProcess.warnUserThreshold;
@@ -198,8 +199,8 @@ export class PowerShellProcess {
198199
for (let i = numOfTries; i > 0; i--) {
199200
if (utils.checkIfFileExists(this.sessionFilePath)) {
200201
this.log.write("Session file found");
201-
const sessionDetails = utils.readSessionFile(this.sessionFilePath);
202-
utils.deleteSessionFile(this.sessionFilePath);
202+
const sessionDetails = SessionManager.readSessionFile(this.sessionFilePath);
203+
SessionManager.deleteSessionFile(this.sessionFilePath);
203204
return sessionDetails;
204205
}
205206

src/session.ts

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ export enum SessionStatus {
3434
Failed,
3535
}
3636

37+
export interface IEditorServicesSessionDetails {
38+
status: string;
39+
reason: string;
40+
detail: string;
41+
powerShellVersion: string;
42+
channel: string;
43+
languageServicePort: number;
44+
debugServicePort: number;
45+
languageServicePipeName: string;
46+
debugServicePipeName: string;
47+
}
48+
49+
export type IReadSessionFileCallback = (details: IEditorServicesSessionDetails) => void;
50+
3751
export class SessionManager implements Middleware {
3852
public HostName: string;
3953
public HostVersion: string;
@@ -55,7 +69,7 @@ export class SessionManager implements Middleware {
5569
private registeredCommands: vscode.Disposable[] = [];
5670
private languageServerClient: LanguageClient = undefined;
5771
private sessionSettings: Settings.ISettings = undefined;
58-
private sessionDetails: utils.IEditorServicesSessionDetails;
72+
private sessionDetails: IEditorServicesSessionDetails;
5973
private sessionsFolder = path.resolve(__dirname, "../sessions");
6074
private sessionFilePathPrefix = path.resolve(this.sessionsFolder, "PSES-VSCode-" + process.env.VSCODE_PID);
6175
private bundledModulesPath: string;
@@ -249,7 +263,7 @@ export class SessionManager implements Middleware {
249263
await this.start(exeNameOverride);
250264
}
251265

252-
public getSessionDetails(): utils.IEditorServicesSessionDetails {
266+
public getSessionDetails(): IEditorServicesSessionDetails {
253267
return this.sessionDetails;
254268
}
255269

@@ -269,6 +283,29 @@ export class SessionManager implements Middleware {
269283
return `${this.sessionFilePathPrefix}-Debug`;
270284
}
271285

286+
public async writeSessionFile(sessionFilePath: string, sessionDetails: IEditorServicesSessionDetails) {
287+
await vscode.workspace.fs.createDirectory(vscode.Uri.file(this.sessionsFolder));
288+
289+
const writeStream = fs.createWriteStream(sessionFilePath);
290+
writeStream.write(JSON.stringify(sessionDetails));
291+
writeStream.close();
292+
}
293+
294+
public static readSessionFile(sessionFilePath: string): IEditorServicesSessionDetails {
295+
// TODO: Use vscode.workspace.fs.readFile instead of fs.readFileSync.
296+
const fileContents = fs.readFileSync(sessionFilePath, "utf-8");
297+
return JSON.parse(fileContents);
298+
}
299+
300+
public static async deleteSessionFile(sessionFilePath: string) {
301+
try {
302+
await vscode.workspace.fs.delete(vscode.Uri.file(sessionFilePath));
303+
// fs.unlinkSync(sessionFilePath);
304+
} catch (e) {
305+
// TODO: Be more specific about what we're catching
306+
}
307+
}
308+
272309
public createDebugSessionProcess(
273310
sessionPath: string,
274311
sessionSettings: Settings.ISettings): PowerShellProcess {
@@ -526,7 +563,7 @@ export class SessionManager implements Middleware {
526563
}
527564
}
528565

529-
private startLanguageClient(sessionDetails: utils.IEditorServicesSessionDetails) {
566+
private startLanguageClient(sessionDetails: IEditorServicesSessionDetails) {
530567
// Log the session details object
531568
this.log.write(JSON.stringify(sessionDetails));
532569

src/utils.ts

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -37,44 +37,6 @@ export function getPipePath(pipeName: string) {
3737
}
3838
}
3939

40-
export interface IEditorServicesSessionDetails {
41-
status: string;
42-
reason: string;
43-
detail: string;
44-
powerShellVersion: string;
45-
channel: string;
46-
languageServicePort: number;
47-
debugServicePort: number;
48-
languageServicePipeName: string;
49-
debugServicePipeName: string;
50-
}
51-
52-
export type IReadSessionFileCallback = (details: IEditorServicesSessionDetails) => void;
53-
54-
const sessionsFolder = path.resolve(__dirname, "../sessions");
55-
56-
export async function writeSessionFile(sessionFilePath: string, sessionDetails: IEditorServicesSessionDetails) {
57-
await vscode.workspace.fs.createDirectory(vscode.Uri.file(sessionsFolder));
58-
59-
const writeStream = fs.createWriteStream(sessionFilePath);
60-
writeStream.write(JSON.stringify(sessionDetails));
61-
writeStream.close();
62-
}
63-
64-
65-
export function readSessionFile(sessionFilePath: string): IEditorServicesSessionDetails {
66-
const fileContents = fs.readFileSync(sessionFilePath, "utf-8");
67-
return JSON.parse(fileContents);
68-
}
69-
70-
export function deleteSessionFile(sessionFilePath: string) {
71-
try {
72-
fs.unlinkSync(sessionFilePath);
73-
} catch (e) {
74-
// TODO: Be more specific about what we're catching
75-
}
76-
}
77-
7840
export function checkIfFileExists(filePath: string): boolean {
7941
try {
8042
fs.accessSync(filePath, fs.constants.R_OK);

0 commit comments

Comments
 (0)