Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ReplService.evalCode does not contribute to TypeScript's view of the scope #1764

Closed
abextm opened this issue May 21, 2022 · 1 comment · Fixed by #1824
Closed

ReplService.evalCode does not contribute to TypeScript's view of the scope #1764

abextm opened this issue May 21, 2022 · 1 comment · Fixed by #1824
Labels
Milestone

Comments

@abextm
Copy link

abextm commented May 21, 2022

Expected Behavior

Executing code with evalCode to be equivalent to typing some code into the REPL's stdin

Actual Behavior

The REPL believes any declared variables are simultaneously not declared and already declared

Steps to reproduce the problem

const tsNode = require("ts-node");

let repl = tsNode.createRepl();
let service = tsNode.create({...repl.evalAwarePartialHost});
repl.setService(service);
repl.start();

repl.evalCode(`let foo = "bar"; console.log(foo);`);

Observe the code has been executed as bar is printed to stdout.

Enter foo into stdin, incorrectly giving
<repl>.ts:5:1 - error TS2304: Cannot find name 'foo'.
(should print bar)

Enter let foo = "baz"; into stdin giving the correct error, but with the wrong source text

<repl>.ts:1
"use strict"; void 0;
^

Uncaught SyntaxError: Identifier 'foo' has already been declared

Specifications

ts-node v10.7.0
node v18.1.0
compiler v4.6.4
  • Operating system and version:
    Arch Linux
@cspotcode cspotcode added the bug label May 21, 2022
@cspotcode
Copy link
Collaborator

Thanks for reporting this and for including a minimal reproduction.

I think I've tracked this down:

const isCompletion = !/\n$/.test(input);

ts-node/src/repl.ts

Lines 588 to 589 in 78d103f

if (isCompletion) {
undo();

The good news for you is that you have a workaround until ts-node is able to release a proper fix: be sure the string you pass to evalCode ends in a newline.

@cspotcode cspotcode added this to the 10.9.0 or 11.0.0 milestone May 21, 2022
@cspotcode cspotcode modified the milestones: 10.9.0 or 11.0.0, 10.8.1 Jun 1, 2022
@cspotcode cspotcode modified the milestones: 10.8.1, 10.8.2 Jun 3, 2022
@cspotcode cspotcode modified the milestones: 10.8.2, 10.8.3 Jul 2, 2022
cspotcode added a commit that referenced this issue Jul 2, 2022
cspotcode added a commit that referenced this issue Jul 2, 2022
crapStone pushed a commit to Calciumdibromid/CaBr2 that referenced this issue Jul 18, 2022
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [ts-node](https://typestrong.org/ts-node) ([source](https://github.com/TypeStrong/ts-node)) | devDependencies | minor | [`10.8.2` -> `10.9.1`](https://renovatebot.com/diffs/npm/ts-node/10.8.2/10.9.1) |

---

### Release Notes

<details>
<summary>TypeStrong/ts-node</summary>

### [`v10.9.1`](https://github.com/TypeStrong/ts-node/releases/tag/v10.9.1)

[Compare Source](TypeStrong/ts-node@v10.9.0...v10.9.1)

**Fixed**

-   Workaround nodejs bug introduced in 18.6.0 ([#&#8203;1838](TypeStrong/ts-node#1838)) [@&#8203;cspotcode](https://github.com/cspotcode)
    -   Only affects projects on node >=18.6.0 using `--esm`
    -   Older versions of node and projects without `--esm` are unaffected

https://github.com/TypeStrong/ts-node/milestone/18?closed=1

### [`v10.9.0`](https://github.com/TypeStrong/ts-node/releases/tag/v10.9.0)

[Compare Source](TypeStrong/ts-node@v10.8.2...v10.9.0)

**Added**

-   `--project` accepts path to a directory containing a `tsconfig.json` ([#&#8203;1829](TypeStrong/ts-node#1829), [#&#8203;1830](TypeStrong/ts-node#1830)) [@&#8203;cspotcode](https://github.com/cspotcode)
    -   previously it required an explicit filename
-   Added helpful error message when swc version is too old to support our configuration ([#&#8203;1802](TypeStrong/ts-node#1802)) [@&#8203;cspotcode](https://github.com/cspotcode)
-   Added `experimentalTsImportSpecifiers` option which allows using voluntary `.ts` file extensions in import specifiers (undocumented except for [API docs](https://typestrong.org/ts-node/api/interfaces/CreateOptions.html#experimentalTsImportSpecifiers)) ([#&#8203;1815](TypeStrong/ts-node#1815)) [@&#8203;cspotcode](https://github.com/cspotcode)

**Fixed**

-   Fixed bug where `child_process.fork()` would erroneously execute the parent's entrypoint script, not the intended child script ([#&#8203;1812](TypeStrong/ts-node#1812), [#&#8203;1814](TypeStrong/ts-node#1814)) [@&#8203;devversion](https://github.com/devversion)
-   Fixed support for jsx modes `"react-jsx"` and `"react-jsxdev"` in swc transpiler ([#&#8203;1800](TypeStrong/ts-node#1800), [#&#8203;1802](TypeStrong/ts-node#1802)) [@&#8203;cspotcode](https://github.com/cspotcode)
-   Fixed support for import assertions in swc transpiler ([#&#8203;1817](TypeStrong/ts-node#1817), [#&#8203;1802](TypeStrong/ts-node#1802)) [@&#8203;cspotcode](https://github.com/cspotcode)
-   Fixed bug where calling `repl.evalCode()` with code not ending in a newline would not update the typechecker accordingly ([#&#8203;1764](TypeStrong/ts-node#1764), [#&#8203;1824](TypeStrong/ts-node#1824)) [@&#8203;cspotcode](https://github.com/cspotcode)

https://github.com/TypeStrong/ts-node/milestone/16?closed=1

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xMTEuMSIsInVwZGF0ZWRJblZlciI6IjMyLjExMi4wIn0=-->

Co-authored-by: cabr2-bot <cabr2.help@gmail.com>
Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1461
Reviewed-by: Epsilon_02 <epsilon_02@noreply.codeberg.org>
Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants