Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@
"@commitlint/config-conventional": "^20.0.0",
"@commitlint/prompt": "^20.0.0",
"@effect/cli": "catalog:effect",
"@effect/language-service": "catalog:effect",
"@effect/tsgo": "^0.5.1",

@coderabbitai coderabbitai Bot May 5, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing required companion package @typescript/native-preview.

The @effect/tsgo docs state: "At the moment, you still need the standard native TypeScript install (@typescript/native-preview) alongside @effect/tsgo." Without it, developers configuring their editor to use effect-tsgo as the language server may encounter failures.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` at line 55, The package.json is missing the required companion
package `@typescript/native-preview` required by `@effect/tsgo`; add
"@typescript/native-preview": "<latest-compatible-version>" alongside
"@effect/tsgo" in your dependencies or devDependencies in package.json (near the
existing "@effect/tsgo" entry) and run your package manager to install so the
effect-tsgo language server works correctly.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

What is the latest stable version of @effect/tsgo on npm? Is 0.5.1 still current?

💡 Result:

Latest stable version of @effect/tsgo on npm: 0.5.1 (i.e., 0.5.1 is the most recent released patch listed for the @effect/tsgo package in the project’s changelog) [1]. Is 0.5.1 still current as of 2026-05-05? Yes—there’s an explicit 0.5.1 entry in the @effect/tsgo changelog [1], and the repository’s recent release automation shows version packaging activity around later dates without contradicting 0.5.1 being the latest for the root @effect/tsgo package [2][3]. Note: @effect/tsgo is described by the project as “currently in Alpha,” so “stable” here refers to the latest published release number, not to a non-alpha maturity level [4].

Citations:


🏁 Script executed:

# Check if `@typescript/native-preview` is in package.json
rg "@typescript/native-preview" package.json

Repository: ForgeRock/ping-javascript-sdk

Length of output: 55


🏁 Script executed:

# List all dependencies and devDependencies in package.json to verify `@effect/tsgo` context
cat -n package.json | sed -n '40,70p'

Repository: ForgeRock/ping-javascript-sdk

Length of output: 1203


Pin @effect/tsgo to an exact version — it's explicitly Alpha.

@effect/tsgo is in Alpha and the upstream project warns to expect breaking changes between releases. Using ^0.5.1 allows automatic minor bumps that can silently break the plugin configuration committed in tsconfig.base.json.

Pin to the exact version to prevent uncontrolled upgrades:

📌 Proposed fix
-    "@effect/tsgo": "^0.5.1",
+    "@effect/tsgo": "0.5.1",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"@effect/tsgo": "^0.5.1",
"@effect/tsgo": "0.5.1",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` at line 55, The package dependency "@effect/tsgo": "^0.5.1"
should be pinned to an exact version to avoid automatic minor/patch upgrades;
update the dependency entry in package.json by replacing the caret semver
specifier (e.g., "^0.5.1") with the exact version string (e.g., "0.5.1") for the
"@effect/tsgo" dependency so the project will not pull in unintended breaking
changes from Alpha releases.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ryanbas21 The docs do mention that you need to install @typescript/native-preview alongside. Regarding the version pinning, might be a good idea to avoid breaking changes for now but nbd.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose we can do this, but i'm not sure the affects on a workspace. You can install tsgo on your system or just use regular typescript before tsgo. the language service should work either way

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you mean to switch from tsgo to language-service?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for any references to tsgo in the codebase

echo "=== Searching for tsgo usage in config files ==="
rg -n -C3 --type-add 'config:*.{json,js,ts,yaml,yml}' --type config 'tsgo|effect-tsgo'

echo "=== Searching for tsgo imports or requires ==="
rg -n -C3 --type ts --type js 'from.*tsgo|require.*tsgo'

echo "=== Checking if `@effect/language-service` requires tsgo as peer ==="
fd -e json package.json packages node_modules/@effect/language-service --exec cat {} \; | grep -A5 -B5 'peerDep\|tsgo'

Repository: ForgeRock/ping-javascript-sdk

Length of output: 4985


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Locate `@effect/language-service` block(s) in pnpm-lock.yaml ==="
rg -n "('`@effect/language-service`@|`@effect/language-service`:) " pnpm-lock.yaml || true

echo
echo "=== Search for tsgo references near `@effect/language-service` ==="
# Grab a wider window around any language-service-related lines and see if tsgo appears nearby
rg -n -C20 "`@effect/language-service`" pnpm-lock.yaml | rg -n "tsgo|language-service" || true

echo
echo "=== Directly search if pnpm-lock.yaml links language-service -> tsgo ==="
rg -n -C5 "language-service" pnpm-lock.yaml | rg -n "tsgo" || true

Repository: ForgeRock/ping-javascript-sdk

Length of output: 635


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Exact line numbers for `@effect/language-service`@0.35.2 ==="
rg -n "`@effect/language-service`@0.35.2" pnpm-lock.yaml || true

echo
echo "=== Snippet near top reference to `@effect/language-service` and `@effect/tsgo` (lines 40-120) ==="
nl -ba pnpm-lock.yaml | sed -n '40,130p'

echo
echo "=== Snippet around package entry `@effect/language-service`@0.35.2 (±80 lines) ==="
# Find the first occurrence line number, then print around it
line=$(rg -n "`@effect/language-service`@0.35.2" pnpm-lock.yaml | head -n1 | cut -d: -f1)
echo "Using line: $line"
nl -ba pnpm-lock.yaml | sed -n "$((line-80)),$((line+80))p"

echo
echo "=== Snippet near any `@effect/tsgo` mention near language-service (±40 lines for each match of language-service) ==="
# For each language-service match, show a small window and filter mentally
for l in $(rg -n "`@effect/language-service`" pnpm-lock.yaml | head -n20 | cut -d: -f1); do
  echo "--- around line $l ---"
  nl -ba pnpm-lock.yaml | sed -n "$((l-20)),$((l+20))p"
done

Repository: ForgeRock/ping-javascript-sdk

Length of output: 380


🏁 Script executed:

#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import re, itertools

path="pnpm-lock.yaml"
with open(path,"r",encoding="utf-8") as f:
    lines=f.readlines()

def find_block(start_pat, next_pat=r"^  '@"):
    # find first line index containing start_pat
    for i,l in enumerate(lines):
        if start_pat in l:
            start=i
            break
    else:
        print(f"START PAT NOT FOUND: {start_pat}")
        return

    # find next block start after start
    for j in range(start+1, len(lines)):
        if re.match(next_pat, lines[j]):
            end=j
            break
    else:
        end=len(lines)
    print(f"--- Block for {start_pat!r}: lines {start+1}-{end} ---")
    # print block with line numbers
    for k in range(start, min(end, start+220)):  # cap
        print(f"{k+1:6d}: {lines[k].rstrip()}")
    print(f"--- End (or capped) ---")
    # summarize tsgo presence
    block_text="".join(lines[start:end])
    m=re.search(r"`@effect/tsgo`", block_text)
    print("Contains '`@effect/tsgo`' within block:", bool(m))
    if m:
        # print matching lines
        for k in range(start, end):
            if "`@effect/tsgo`" in lines[k]:
                print(f"  hit at line {k+1}: {lines[k].rstrip()}")

# There may be multiple occurrences (e.g. snapshot/metadata). Extract both.
find_block("`@effect/language-service`@0.35.2")
# Also extract any empty {} occurrence by extracting around it by searching for the literal line.
for i,l in enumerate(lines):
    if l.strip()=="'`@effect/language-service`@0.35.2': {}" or "`@effect/language-service`@0.35.2': {}" in l:
        # print small window
        start=max(i-5,0); end=min(i+25,len(lines))
        print(f"\n--- Empty/other block occurrence around line {i+1} ---")
        for k in range(start,end):
            print(f"{k+1:6d}: {lines[k].rstrip()}")
        break

PY

Repository: ForgeRock/ping-javascript-sdk

Length of output: 3689


🏁 Script executed:

#!/bin/bash
set -euo pipefail
python3 - <<'PY'
path="pnpm-lock.yaml"
with open(path,"r",encoding="utf-8") as f:
    lines=f.readlines()

def dump(start, end):
    for i in range(start, min(end, len(lines))):
        print(f"{i+1:6d}: {lines[i].rstrip()}")

# Early part near the reported matches
print("=== Dump pnpm-lock.yaml lines 1-140 ===")
dump(0, 140)

# Also dump around the line where language-service block starts (1537)
print("\n=== Dump pnpm-lock.yaml lines 1500-1600 ===")
dump(1500, 1600)
PY

Repository: ForgeRock/ping-javascript-sdk

Length of output: 14451


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Repo-wide search for literal tsgo/ effect-tsgo ==="
rg -n "tsgo|effect-tsgo" .

echo
echo "=== Inspect package.json scripts section ==="
cat package.json | sed -n '1,120p'

Repository: ForgeRock/ping-javascript-sdk

Length of output: 6643


Remove or justify @effect/tsgo if it isn’t required by your tooling.

  • Repo has no tsgo/effect-tsgo imports or script invocations (package.json only runs ts-patch install in postinstall).
  • pnpm-lock.yaml shows @effect/language-service@0.35.2 has no dependencies/peerDependencies on @effect/tsgo, while @effect/tsgo@0.5.1 is only present as a top-level devDependency.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` at line 58, The dependency entry "`@effect/tsgo`" in package.json
appears unused; either remove the "`@effect/tsgo`" devDependency from package.json
or add a clear justification and usage (e.g., reference in a postinstall or
build script or documentation) showing where tsgo is invoked; update
package.json's devDependencies accordingly and, if kept, add a comment in README
or a package.json script that demonstrates the use so reviewers can verify why
"`@effect/tsgo`" is required.

"@eslint/eslintrc": "^3.0.0",
"@eslint/js": "~9.39.0",
"@evilmartians/lefthook": "^2.1.4",
Expand Down
76 changes: 76 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

54 changes: 53 additions & 1 deletion tsconfig.base.json

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we remove the comments from this json? Looks like it's causing syntax errors

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't cause errors, i probably use jsonc. where are the errors?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it was just a syntax highlighting thing in github

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,58 @@
"declaration": true,
"declarationMap": true,
"skipLibCheck": true,
"baseUrl": "."
"baseUrl": ".",
"plugins": [
{
"name": "@effect/language-service",
Comment thread
coderabbitai[bot] marked this conversation as resolved.
"refactors": true,
"diagnostics": true,
"includeSuggestionsInTsc": true,
"quickinfo": true,
"completions": true,
"debug": false,
"goto": true,
"renames": true,
"ignoreEffectSuggestionsInTscExitCode": true,
"ignoreEffectWarningsInTscExitCode": false,
"ignoreEffectErrorsInTscExitCode": false,
"skipDisabledOptimization": false,
"mermaidProvider": "mermaid.live",
"noExternal": false,
"layerGraphFollowDepth": 0,
"inlays": false,
"namespaceImportPackages": [],
"barrelImportPackages": [],
"importAliases": {},
"topLevelNamedReexports": "ignore",
"keyPatterns": [
{
"target": "service",
"pattern": "default",
"skipLeadingPath": ["src/"]
},
{
"target": "custom",
"pattern": "default",
"skipLeadingPath": ["src/"]
}
],
"extendedKeyDetection": false,
"pipeableMinArgCount": 2,
"allowedDuplicatedPackages": [],
"effectFn": ["span"],
"diagnosticSeverity": {},
"overrides": [
{
"include": ["src/**/*.ts"],
"options": {
"diagnosticSeverity": {
"floatingEffect": "error"
}
}
}
]
}
]
}
}
Loading