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

Open files from errors #13390

Merged
merged 10 commits into from
Nov 8, 2023
Merged

Conversation

divyansshhh
Copy link
Contributor

@divyansshhh divyansshhh commented Nov 7, 2022

References

Closes #13277

Code changes

  • splits error rendering from text rendering to allow different default settings for autolinking (new errorRendererFactory)
  • extends ILinkHandler with new optional handlePath method
  • extends IResolver with new resolvePath method; in the future the implementation of this methods would ideally be replaced with a server request to a new endpoint proposed in Resolve server absolute path to server or kernel-relative path jupyter-server/jupyter_server#1280
  • creates a new @jupyterlab/debugger-extension:source-viewer plugin, greatly simplifying the main plugin. The new plugin provides:
    • debugger:open-source command
    • IDebuggerSourceViewer token with a single open(source, breakpoint) method
  • allows to open text files at a specific line by implementing RFC5147 line syntax in FileEditorWidget.setFragment

User-facing changes

Paths in tracebacks will be clickable for the user and clicking on them will open the file where the error occurred.

open-traceback-demo

@jupyterlab-probot
Copy link

Thanks for making a pull request to jupyterlab!
To try out this branch on binder, follow this link: Binder

@krassowski krassowski added this to the 4.1.0 milestone Apr 26, 2023
@krassowski krassowski self-assigned this May 14, 2023
@github-actions github-actions bot added Design System CSS pkg:debugger pkg:fileeditor tag:CSS For general CSS related issues and pecadilloes labels May 21, 2023
@krassowski krassowski marked this pull request as ready for review May 21, 2023 21:36
@krassowski krassowski changed the title Create renderer to render errors Open files from errors May 21, 2023
Copy link
Member

@fcollonval fcollonval left a comment

Choose a reason for hiding this comment

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

Thanks @divyansshhh

I have only one major comment about the handling of the range lines fragment.

Thanks a lot for this addition.

packages/debugger-extension/src/index.ts Outdated Show resolved Hide resolved
packages/rendermime-extension/src/index.ts Show resolved Hide resolved
packages/rendermime/src/registry.ts Outdated Show resolved Hide resolved
packages/fileeditor/src/widget.ts Outdated Show resolved Hide resolved
// TODO: a clean implementation would be server-side and depends on:
// https://github.com/jupyter-server/jupyter_server/issues/1280

const rootDir = PageConfig.getOption('rootUri').replace('file://', '');
Copy link
Member

Choose a reason for hiding this comment

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

@krassowski I did not realize it earlier but actually rootUri is not a default page config option of JupyterLab. It comes from jupyter LSP. What was the reason to introduce it compare to the existing serverRoot - it seems a duplication for me?

If we are to keep rootUri, we should make it part of jupyterlab_server (and probably deprecate serverRoot ?).

This can be addressed as a follow-up of this PR.

Copy link
Member

Choose a reason for hiding this comment

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

It does look similar, the difference is that rootUri is a proper URL (file:/// prefix), which keeps expanded home and takes care of weird Windows issues, while serverRoot does not.

Both derive from ContentsManager.root_dir, but serverRoot is post-processed variant coming from jupyter-server which forces collapsing of home path which was a UX choice/compromise worked out in jupyter/notebook#2234

Solving jupyter-server/jupyter_server#1280 would relieve us of this dilemma.

Copy link
Member

Choose a reason for hiding this comment

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

Thanks for educating me on this

krassowski and others added 3 commits August 13, 2023 16:51
Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>
"Line position counting starts with zero, so the line
position before the first line of a text/plain MIME
entity has the line position zero"
Copy link
Member

@krassowski krassowski left a comment

Choose a reason for hiding this comment

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

Self-approving despite having contributed to this pull request substantially as this seems to had enough time for discussion and if we want to trial this in 4.1 it is high time to merge.

@krassowski
Copy link
Member

@fcollonval just checking if we can merge it or if you wanted to have another look?

Copy link
Member

@fcollonval fcollonval left a comment

Choose a reason for hiding this comment

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

Let's merge!

Thanks or the ping @krassowski

@krassowski krassowski merged commit d32a2a6 into jupyterlab:main Nov 8, 2023
78 of 83 checks passed
m158261 pushed a commit to m158261/jupyterlab that referenced this pull request Nov 13, 2023
* Create renderer to render errors

* WIP tests scaffold

* Implement opening files from paths in error renderer

* Finish sentence in a comment

* Apply suggestions from code review

Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Improve RFC 5147 adherence for ranges

* Switch to 0-based line numbers based on RFC5147 2.2.3:

"Line position counting starts with zero, so the line
position before the first line of a text/plain MIME
entity has the line position zero"

* Fix undefined check after adding `parseInt`

---------

Co-authored-by: krassowski <5832902+krassowski@users.noreply.github.com>
Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>
krassowski added a commit that referenced this pull request Dec 15, 2023
* Updated input field with more descriptive aria-labels and placeholders

* Package integrity updates

* Run integrity

* Move ID generation to improve render flow

* Use ellipsis character for consistency

* Add error indicator in Table of Contents (#14784)

* feat: add error indicator in toc

* test: for error indicator

* Update Playwright Snapshots

* style: make the error symbol colorblind-accessible

* Update Playwright Snapshots

* fix: remove from _errorCells when cell is rerun

* perf: update error to -0.5 for api compatibility

* test: update error status to -0.5

* Update Playwright Snapshots

* Force text symbol

* Update Playwright Snapshots

* Update Playwright Snapshots

* Update Playwright Snapshots

* Revert notebook-panel-1 snapshot update

* Robustify test by defining notebook a priori

* Update Playwright Snapshots

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michał Krassowski <5832902+krassowski@users.noreply.github.com>
Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Remove unnecessary requirement from servicesPlugin (#15362)

* [pre-commit.ci] pre-commit autoupdate (#15358)

* [pre-commit.ci] pre-commit autoupdate

updates:
- [github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.5.0](pre-commit/pre-commit-hooks@v4.4.0...v4.5.0)
- [github.com/python-jsonschema/check-jsonschema: 0.27.0 → 0.27.1](python-jsonschema/check-jsonschema@0.27.0...0.27.1)
- [github.com/psf/black: 23.9.1 → 23.10.1](psf/black@23.9.1...23.10.1)
- [github.com/astral-sh/ruff-pre-commit: v0.0.292 → v0.1.4](astral-sh/ruff-pre-commit@v0.0.292...v0.1.4)

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Alig ruff version

* Add ruff exception

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Update notebook window on resize if height changes (#15357)

* Add a test for resizing notebook (should fail)

* Update window on resize

* Polish the test

* Add the test notebook

* Use throttler to limit the number of updates

Using throttler over debouncer proposed in #15109 because
debouncer would not show cells progressively during resize
until user has stopped resizing.

* Open files from errors (#13390)

* Create renderer to render errors

* WIP tests scaffold

* Implement opening files from paths in error renderer

* Finish sentence in a comment

* Apply suggestions from code review

Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Improve RFC 5147 adherence for ranges

* Switch to 0-based line numbers based on RFC5147 2.2.3:

"Line position counting starts with zero, so the line
position before the first line of a text/plain MIME
entity has the line position zero"

* Fix undefined check after adding `parseInt`

---------

Co-authored-by: krassowski <5832902+krassowski@users.noreply.github.com>
Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Bump tj-actions/changed-files from 39.2.0 to 40.0.2 (#15342)

Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 39.2.0 to 40.0.2.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](tj-actions/changed-files@v39.2.0...v40.0.2)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix scrolling past long outputs in presence of un-rendered headings (#15356)

* Add a test for smooth scrolling over long outputs

* Do no scroll when setting the cursor position in md cells

* Adjust test name to clarify the test case

* Add the test notebook

* Clean up the test directory

* Fix overreactive scrolling to next cell after `Shift + Enter` (#15288)

* Add a test case for #14878

* Fix the smart/auto scrolling logic for long items

Items larger than the size of the viewport were not
considered by the scroll logic leading to bad UX when
smart/auto scroll was requested on certain operations.

* Use pixel-based, cell-height-derived threshold for scrolling

* Implement dual behaviour, simplify code, account for top padding

* Use greater or equal to avoid scrolling if item fully visible

* Update tests to reflect new expectations

* Clean up the temp directory after tests

* Fix scrolling when dragging files in the file browser (#15318)

* Fix scrolling on edges in file browser

* Add a simple test

* Fix update button in extension manager (#15331)

* Fix update button in extension manager

* Apply suggestions from code review

Make action options more flexible

Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Fix docs and make install options optional

* Add test for update button

* Update Playwright Snapshots

* Revert spurious snapshot updates

---------

Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: krassowski <5832902+krassowski@users.noreply.github.com>

* added default property (#15346)

* Exclude ipynb files in prettier pre-commit (#15378)

* Update @jupyter/ydoc in dev_mode (#15383)

* Define cells to run as independent of selection (#14996)

* Define cells to run as independent of selection

* Restore side effects of `runAll()`

* Skip optional `slice` argument

Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Restore previous behaviour of `runAllBelow()`

by making last cell active.

---------

Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>

* Fix highlighting search in an out-of-viewport cell (#15376)

* Fix highlighting search in an out-of-viewport cell

* Update cells count

* Don't show default value for objects in Settings Editor (#15380)

* Don't show default value if schema type is `object`

* Prettier

* Bump axios from 1.3.4 to 1.6.1 (#15385)

Bumps [axios](https://github.com/axios/axios) from 1.3.4 to 1.6.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](axios/axios@v1.3.4...v1.6.1)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix connection loop issue with standalone foreign document in LSP (#15262)

* Populate

* Improve VirtualDocument

* Add test

* Update packages/lsp/test/document.spec.ts

Co-authored-by: Michał Krassowski <5832902+krassowski@users.noreply.github.com>

---------

Co-authored-by: Michał Krassowski <5832902+krassowski@users.noreply.github.com>

* Update to TypeScript 5.1 (#14638)

* Bump typescript to 5.1.6 and rimraf to 5.0.5

* Dedupe the yarn.lock

---------

Co-authored-by: Frédéric Collonval <fcollonval@gmail.com>

* Resolved merge conflict

* Package integrity updates

Merged changes from main

* Package integrity updates

* Package integrity updates

* Update Playwright Snapshots

* Fixed integrity

* Update Playwright Snapshots

* Update Playwright Snapshots

* Remove spurious snapshot updates

* Update the test to reflect the new wording

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: EC2 Default User <m158261@users.noreply.github.com>
Co-authored-by: Michał Krassowski <5832902+krassowski@users.noreply.github.com>
Co-authored-by: Tian Wang <wangtian0312@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Frédéric Collonval <fcollonval@users.noreply.github.com>
Co-authored-by: Paul Kim <paulkim3151@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Divyansh Choudhary <divyanshchoudhary99@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nate Bowditch <111072326+nbowditch-einblick@users.noreply.github.com>
Co-authored-by: LJMP <24670649+LJMP@users.noreply.github.com>
Co-authored-by: Nicolas Brichet <32258950+brichet@users.noreply.github.com>
Co-authored-by: firai <firai.admin@gmail.com>
Co-authored-by: Duc Trung Le <leductrungxf@gmail.com>
Co-authored-by: Jeremy Tuloup <jeremy.tuloup@gmail.com>
Co-authored-by: Frédéric Collonval <fcollonval@gmail.com>
@linlol
Copy link
Contributor

linlol commented Mar 1, 2024

hello @divyansshhh

may I confirm that if our code's source path differs with jupyter's root dir

For example, we start jupyter with/root

While our code is stored at/src

Can we still enable this feature?

On my side, I can see the file becomes the a link, but it is not clickable.

@krassowski
Copy link
Member

@linlol this is discussed in jupyter-server/jupyter_server#1280. There are pull requests open against jupyter-server and jupyter-client implementing an API that would allow frontend to point to right place. Recently jupyter-server team suggested to instead pursue jupyter/jupyter_client#1006 but there was not much follow up. Any help on nudging the jupyter-server team on these issues would be appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Open files directly from tracebacks
5 participants