@effect/tsgo 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bin/effect-tsgo.js +48 -52
  2. package/package.json +12 -10
@@ -195732,7 +195732,7 @@ var FileReadError = class extends TaggedError("FileReadError") {
195732
195732
  //#endregion
195733
195733
  //#region package.json
195734
195734
  var name = "@effect/tsgo";
195735
- var version = "0.0.3";
195735
+ var version = "0.0.5";
195736
195736
 
195737
195737
  //#endregion
195738
195738
  //#region src/setup/consts.ts
@@ -196040,7 +196040,8 @@ const computePackageJsonChanges = (current, target) => {
196040
196040
  description: descriptions.join("; "),
196041
196041
  changes: [{
196042
196042
  fileName: current.path,
196043
- textChanges: changes
196043
+ textChanges: changes,
196044
+ isNewFile: false
196044
196045
  }]
196045
196046
  }],
196046
196047
  messages
@@ -196106,7 +196107,8 @@ const computeTsConfigChanges = (current, target, lspVersion) => {
196106
196107
  description: descriptions.join("; "),
196107
196108
  changes: [{
196108
196109
  fileName: current.sourceFile.fileName,
196109
- textChanges: changes
196110
+ textChanges: changes,
196111
+ isNewFile: false
196110
196112
  }]
196111
196113
  }],
196112
196114
  messages
@@ -196146,7 +196148,8 @@ const computeVSCodeSettingsChanges = (current, target) => {
196146
196148
  description: descriptions.join("; "),
196147
196149
  changes: [{
196148
196150
  fileName: current.path,
196149
- textChanges: changes
196151
+ textChanges: changes,
196152
+ isNewFile: false
196150
196153
  }]
196151
196154
  }],
196152
196155
  messages
@@ -196171,9 +196174,29 @@ const computeChanges = (assessment, target) => {
196171
196174
  const vscodeResult = computeVSCodeSettingsChanges(assessment.vscodeSettings.value, vscodeTarget);
196172
196175
  codeActions = [...codeActions, ...vscodeResult.codeActions];
196173
196176
  messages = [...messages, ...vscodeResult.messages];
196177
+ } else {
196178
+ const dir = node_path.dirname(assessment.packageJson.path);
196179
+ const vscodeSettingsPath = node_path.join(dir, ".vscode", "settings.json");
196180
+ const content = JSON.stringify(vscodeTarget.settings, null, 2) + "\n";
196181
+ codeActions = [...codeActions, {
196182
+ description: "Create .vscode/settings.json",
196183
+ changes: [{
196184
+ fileName: vscodeSettingsPath,
196185
+ textChanges: [{
196186
+ span: {
196187
+ start: 0,
196188
+ length: 0
196189
+ },
196190
+ newText: content
196191
+ }],
196192
+ isNewFile: true
196193
+ }]
196194
+ }];
196174
196195
  }
196175
196196
  }
196176
196197
  }
196198
+ if (isSome(target.packageJson.lspVersion) && codeActions.length > 0) messages = [...messages, "Run `effect-tsgo patch` to complete the installation."];
196199
+ else if (isNone(target.packageJson.lspVersion) && isSome(assessment.packageJson.lspVersion)) messages = [...messages, "Run `effect-tsgo unpatch` to restore the original TypeScript-Go binary."];
196177
196200
  if (isSome(target.packageJson.lspVersion) && target.editors.length > 0) {
196178
196201
  messages = [...messages, ""];
196179
196202
  if (target.editors.includes("vscode")) messages = [
@@ -196184,18 +196207,6 @@ const computeChanges = (assessment, target) => {
196184
196207
  " 3. The language service plugin will be loaded automatically",
196185
196208
  ""
196186
196209
  ];
196187
- if (target.editors.includes("nvim")) messages = [
196188
- ...messages,
196189
- "Neovim (with nvim-vtsls):",
196190
- " Refer to: https://github.com/yioneko/vtsls?tab=readme-ov-file#typescript-plugin-not-activated",
196191
- ""
196192
- ];
196193
- if (target.editors.includes("emacs")) messages = [
196194
- ...messages,
196195
- "Emacs:",
196196
- " Step-by-step instructions: https://gosha.net/2025/effect-ls-emacs/",
196197
- ""
196198
- ];
196199
196210
  }
196200
196211
  return {
196201
196212
  codeActions,
@@ -196332,15 +196343,24 @@ const renderCodeActions = (result, assessmentState) => gen(function* () {
196332
196343
  const sourceFiles = [assessmentState.packageJson.sourceFile, assessmentState.tsconfig.sourceFile];
196333
196344
  if (isSome(assessmentState.vscodeSettings)) sourceFiles.push(assessmentState.vscodeSettings.value.sourceFile);
196334
196345
  for (const codeAction of result.codeActions) for (const fileChange of codeAction.changes) {
196335
- const sourceFile = sourceFiles.find((sf) => sf.fileName === fileChange.fileName);
196336
196346
  yield* log("");
196337
196347
  yield* log(bold(codeAction.description));
196338
196348
  yield* log(cyan(fileChange.fileName));
196339
196349
  yield* log("");
196340
- if (sourceFile) {
196341
- const diffLines = renderFileChanges(sourceFile, fileChange.textChanges);
196342
- for (const line of diffLines) yield* log(line);
196343
- } else yield* log(" (file will be modified)");
196350
+ if (fileChange.isNewFile) {
196351
+ const newFileLines = fileChange.textChanges[0].newText.split("\n");
196352
+ for (let i = 0; i < newFileLines.length; i++) {
196353
+ const line = newFileLines[i];
196354
+ if (i === newFileLines.length - 1 && line.length === 0 && newFileLines.length > 1) continue;
196355
+ yield* log(renderLine(i + 1, "+", line, green));
196356
+ }
196357
+ } else {
196358
+ const sourceFile = sourceFiles.find((sf) => sf.fileName === fileChange.fileName);
196359
+ if (sourceFile) {
196360
+ const diffLines = renderFileChanges(sourceFile, fileChange.textChanges);
196361
+ for (const line of diffLines) yield* log(line);
196362
+ } else yield* log(" (file will be modified)");
196363
+ }
196344
196364
  }
196345
196365
  if (result.messages.length > 0) {
196346
196366
  yield* log("");
@@ -196390,24 +196410,6 @@ const gatherTargetState = (assessment, context) => gen(function* () {
196390
196410
  vscodeSettings: none$3(),
196391
196411
  editors: []
196392
196412
  };
196393
- const currentPrepareState = match$8(assessment.packageJson.prepareScript, {
196394
- onNone: () => false,
196395
- onSome: (script) => script.hasPatch
196396
- });
196397
- const prepareScript = yield* select({
196398
- message: "Enable language service diagnostics during TypeScript compilation?",
196399
- choices: [{
196400
- title: "Yes",
196401
- description: "Enable patching - Recommended for LLMs, diagnostics will appear in tsc output and CI/CD, will patch the tsc binary and typescript library locally.",
196402
- value: true,
196403
- selected: currentPrepareState
196404
- }, {
196405
- title: "No",
196406
- description: "Skip patching - diagnostics only available in your editor",
196407
- value: false,
196408
- selected: !currentPrepareState
196409
- }]
196410
- });
196411
196413
  const hasVscodeSettings = isSome(assessment.vscodeSettings);
196412
196414
  const editors = yield* multiSelect({
196413
196415
  message: "Which editors do you use?",
@@ -196434,7 +196436,7 @@ const gatherTargetState = (assessment, context) => gen(function* () {
196434
196436
  dependencyType: lspDependencyType,
196435
196437
  version: context.defaultLspVersion
196436
196438
  }),
196437
- prepareScript
196439
+ prepareScript: true
196438
196440
  },
196439
196441
  tsconfig: { plugin: true },
196440
196442
  vscodeSettings,
@@ -196493,11 +196495,9 @@ const setupCommand = make("setup").pipe(withDescription("Setup @effect/tsgo for
196493
196495
  const fs = yield* FileSystem;
196494
196496
  const currentDir = path.resolve(process.cwd());
196495
196497
  const assessmentState = assess(yield* createAssessmentInput(currentDir, yield* selectTsConfigFile(currentDir)));
196496
- const targetState = yield* gatherTargetState(assessmentState, { defaultLspVersion: DEFAULT_LSP_VERSION });
196497
- const result = computeChanges(assessmentState, targetState);
196498
+ const result = computeChanges(assessmentState, yield* gatherTargetState(assessmentState, { defaultLspVersion: DEFAULT_LSP_VERSION }));
196498
196499
  yield* renderCodeActions(result, assessmentState);
196499
- const needsNewVSCodeSettings = targetState.editors.includes("vscode") && isSome(targetState.packageJson.lspVersion) && isSome(targetState.vscodeSettings) && isNone(assessmentState.vscodeSettings);
196500
- if (result.codeActions.length === 0 && !needsNewVSCodeSettings) return;
196500
+ if (result.codeActions.length === 0) return;
196501
196501
  if (!(yield* confirm({
196502
196502
  message: "Apply all changes?",
196503
196503
  initial: true
@@ -196519,16 +196519,12 @@ const setupCommand = make("setup").pipe(withDescription("Setup @effect/tsgo for
196519
196519
  newContent = newContent.slice(0, start) + textChange.newText + newContent.slice(end);
196520
196520
  }
196521
196521
  yield* fs.writeFileString(fileName, newContent);
196522
+ } else if (fileChange.isNewFile) {
196523
+ const dirName = path.dirname(fileName);
196524
+ yield* fs.makeDirectory(dirName, { recursive: true }).pipe(ignore);
196525
+ yield* fs.writeFileString(fileName, fileChange.textChanges[0].newText);
196522
196526
  }
196523
196527
  }
196524
- if (needsNewVSCodeSettings) {
196525
- const vscodeDir = path.join(currentDir, ".vscode");
196526
- const vscodeSettingsPath = path.join(vscodeDir, "settings.json");
196527
- yield* fs.makeDirectory(vscodeDir, { recursive: true }).pipe(ignore);
196528
- const settings = isSome(targetState.vscodeSettings) ? targetState.vscodeSettings.value.settings : {};
196529
- const content = JSON.stringify(settings, null, 2) + "\n";
196530
- yield* fs.writeFileString(vscodeSettingsPath, content);
196531
- }
196532
196528
  yield* log("Changes applied successfully!");
196533
196529
  yield* log("");
196534
196530
  for (const message of result.messages) yield* log(message);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/tsgo",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "Effect Language Service for TypeScript-Go — Effect-specific diagnostics and hover features.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -21,13 +21,13 @@
21
21
  "bin/"
22
22
  ],
23
23
  "optionalDependencies": {
24
- "@effect/tsgo-win32-x64": "0.0.3",
25
- "@effect/tsgo-win32-arm64": "0.0.3",
26
- "@effect/tsgo-linux-x64": "0.0.3",
27
- "@effect/tsgo-linux-arm64": "0.0.3",
28
- "@effect/tsgo-linux-arm": "0.0.3",
29
- "@effect/tsgo-darwin-x64": "0.0.3",
30
- "@effect/tsgo-darwin-arm64": "0.0.3"
24
+ "@effect/tsgo-win32-x64": "0.0.5",
25
+ "@effect/tsgo-win32-arm64": "0.0.5",
26
+ "@effect/tsgo-linux-x64": "0.0.5",
27
+ "@effect/tsgo-linux-arm64": "0.0.5",
28
+ "@effect/tsgo-linux-arm": "0.0.5",
29
+ "@effect/tsgo-darwin-x64": "0.0.5",
30
+ "@effect/tsgo-darwin-arm64": "0.0.5"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@effect/platform-node": "4.0.0-beta.11",
@@ -35,10 +35,12 @@
35
35
  "@types/node": "^24.3.0",
36
36
  "tsdown": "^0.20.1",
37
37
  "typescript": "^5.9.2",
38
- "effect": "4.0.0-beta.11"
38
+ "effect": "4.0.0-beta.11",
39
+ "vitest": "^3.2.1"
39
40
  },
40
41
  "scripts": {
41
42
  "build": "tsdown --config tsdown.config.mjs",
42
- "check": "tsc --noEmit -p tsconfig.json"
43
+ "check": "tsc --noEmit -p tsconfig.json",
44
+ "test": "vitest run"
43
45
  }
44
46
  }