Skip to content

Improvement: jumping to a label's precise declaration.#1505

Merged
voodoos merged 7 commits intoocaml:masterfrom
voodoos:fix-locate-label-declaration
Nov 17, 2022
Merged

Improvement: jumping to a label's precise declaration.#1505
voodoos merged 7 commits intoocaml:masterfrom
voodoos:fix-locate-label-declaration

Conversation

@voodoos
Copy link
Copy Markdown
Collaborator

@voodoos voodoos commented Jul 28, 2022

When querying jump to declaration of a record's label foo.ba|r merlin would only jump to the beginning of the corresponding record type declaration.

This is due to the uid's of labels not being registered by the compiler in the Env.uid_to_loc table.

This PR adds these uid registration to typedecl.ml. This means that the fix will only work for the current buffer and we would need to be upstreamed for it to work when jumping to external compilation units.

cc @rgrinberg

@voodoos voodoos requested a review from trefis July 28, 2022 08:47
@voodoos
Copy link
Copy Markdown
Collaborator Author

voodoos commented Jul 28, 2022

While making a test for "locating a label in another CU" I noticed that it was even more broken: after finding the Uid fails it should "fallback to the declaration's node's location" and it was not the case. This is fixed in the second commit.

@rgrinberg
Copy link
Copy Markdown
Member

Looks good to me.

I guess the same problem exists for variant constructors?

@voodoos
Copy link
Copy Markdown
Collaborator Author

voodoos commented Jul 29, 2022

I guess the same problem exists for variant constructors?

I added a test and it worked as expected for constructors. However it relied on the "fallback" so I did the same change as for labels.

However I tested the polymorphic variants' tags and Merlin doesn't even try to locate these. But this will probably be the subject of another PR.

@rgrinberg
Copy link
Copy Markdown
Member

@voodoos any ETA on when this will be merged?

@voodoos voodoos added this to the 4.7 / 3.9 milestone Nov 7, 2022
@voodoos voodoos force-pushed the fix-locate-label-declaration branch from 50624f4 to 52f0a8f Compare November 7, 2022 15:45
@voodoos voodoos linked an issue Nov 7, 2022 that may be closed by this pull request
@voodoos voodoos force-pushed the fix-locate-label-declaration branch from 52f0a8f to f82a385 Compare November 7, 2022 15:49
@voodoos voodoos force-pushed the fix-locate-label-declaration branch 2 times, most recently from 229b451 to bfb0473 Compare November 17, 2022 13:18
And add a test illustrating that improvement along with a FIXME for jumping to the definition.

Also fix locate for label outside the current buffer but that requires
upstream compiler changes.

And add a test illustrating the current (unsatisfying) behaviour.
@voodoos voodoos force-pushed the fix-locate-label-declaration branch from 1301eb8 to 1bf3b9e Compare November 17, 2022 14:38
@voodoos voodoos merged commit 8fa6349 into ocaml:master Nov 17, 2022
voodoos added a commit to voodoos/opam-repository that referenced this pull request Nov 24, 2022
CHANGES:

Thu Nov 24 13:31:42 CEST 2022

  + merlin binary
    - Replace custom "holes" AST nodes by extensions. This restores binary
      compatibility and fixes issues with PPXs when using typed-holes.
      (ocaml/merlin#1503)
    - Do not change temporarily Merlin's cwd when starting a PPX (ocaml/merlin#1521,
      fixes ocaml/merlin#1420)
    - Fix a parsing issue when declaring the `(??)` custom prefix operator.
      (ocaml/merlin#1507, fixes ocaml/merlin#1506)
    - Fix variant constructors' comments grouping (ocaml/merlin#1516, @mheiber, fixes ocaml/merlin#1513)
    - Filter-out duplicates from the `enclosing` command result (ocaml/merlin#1512)
    - Add a new `verbosity=smart` mode for type enclosing that only expand
      modules' types (ocaml/merlin#1374, @ulugbekna)
    - Improve locate for labels' declarations in the current buffer.
      (ocaml/merlin#1505, fixes ocaml/merlin#1524)
    - Fix locate on module without implementation (ocaml/merlin#1522, fixes ocaml/merlin#1519)
    - Allow program name customization when merlin is used as a library. (ocaml/merlin#1532)
  + editor modes
    - vim: load the plugin when necessary if it wasn't loaded before (ocaml/merlin#1511)
    - emacs: update CI for newer releases and fix some warnings (ocaml/merlin#1454,
      @mattiase)
  + test suite
    - Add tests for constructors' documentation (ocaml/merlin#1511)
    - Add test cases for label comment documentation (ocaml/merlin#1526, @mheiber)
    - Add a test for the `enclosing` command (ocaml/merlin#1512)
    - Add tests for interactions between locate and record labels (ocaml/merlin#1505)
    - Add test showing an issue with locate and implicit transitive deps
voodoos added a commit to voodoos/opam-repository that referenced this pull request Nov 24, 2022
CHANGES:

  + merlin binary
    - Replace custom "holes" AST nodes by extensions. This restores binary
      compatibility and fixes issues with PPXs when using typed-holes.
      (ocaml/merlin#1503)
    - Do not change temporarily Merlin's cwd when starting a PPX (ocaml/merlin#1521,
      fixes ocaml/merlin#1420)
    - Fix a parsing issue when declaring the `(??)` custom prefix operator.
      (ocaml/merlin#1507, fixes ocaml/merlin#1506)
    - Fix variant constructors' comments grouping (ocaml/merlin#1516, @mheiber, fixes ocaml/merlin#1513)
    - Filter-out duplicates from the `enclosing` command result (ocaml/merlin#1512)
    - Add a new `verbosity=smart` mode for type enclosing that only expand
      modules' types (ocaml/merlin#1374, @ulugbekna)
    - Improve locate for labels' declarations in the current buffer.
      (ocaml/merlin#1505, fixes ocaml/merlin#1524)
    - Fix locate on module without implementation (ocaml/merlin#1522, fixes ocaml/merlin#1519)
    - Allow program name customization when merlin is used as a library. (ocaml/merlin#1532)
  + editor modes
    - vim: load the plugin when necessary if it wasn't loaded before (ocaml/merlin#1511)
    - emacs: update CI for newer releases and fix some warnings (ocaml/merlin#1454,
      @mattiase)
  + test suite
    - Add tests for constructors' documentation (ocaml/merlin#1511)
    - Add test cases for label comment documentation (ocaml/merlin#1526, @mheiber)
    - Add a test for the `enclosing` command (ocaml/merlin#1512)
    - Add tests for interactions between locate and record labels (ocaml/merlin#1505)
    - Add test showing an issue with locate and implicit transitive deps

[new release] merlin (4.7-413)

CHANGES:

  + merlin binary
    - Replace custom "holes" AST nodes by extensions. This restores binary
      compatibility and fixes issues with PPXs when using typed-holes.
      (ocaml/merlin#1503)
    - Fix a parsing issue when declaring the `(??)` custom prefix operator.
      (ocaml/merlin#1507, fixes ocaml/merlin#1506)
    - Fix variant constructors' comments grouping (ocaml/merlin#1516, @mheiber, fixes ocaml/merlin#1513)
    - Filter-out duplicates from the `enclosing` command result (ocaml/merlin#1512)
  + editor modes
    - vim: load the plugin when necessary if it wasn't loaded before (ocaml/merlin#1511)
  + test suite
    - Add tests for constructors' documentation (ocaml/merlin#1511)
    - Add test cases for label comments documentation (ocaml/merlin#1526, @mheiber)
    - Add a test for the `enclosing` command (ocaml/merlin#1512)

[new release] merlin (4.7-412)

CHANGES:

  + merlin binary
    - Replace custom "holes" AST nodes by extensions. This restores binary
      compatibility and fixes issues with PPXs when using typed-holes.
      (ocaml/merlin#1503)
    - Fix a parsing issue when declaring the `(??)` custom prefix operator.
      (ocaml/merlin#1507, fixes ocaml/merlin#1506)
    - Fix variant constructors' comments grouping (ocaml/merlin#1516, @mheiber, fixes ocaml/merlin#1513)
    - Filter-out duplicates from the `enclosing` command result (ocaml/merlin#1512)
  + editor modes
    - vim: load the plugin when necessary if it wasn't loaded before (ocaml/merlin#1511)
  + test suite
    - Add tests for constructors' documentation (ocaml/merlin#1511)
    - Add test cases for label comment documentation (ocaml/merlin#1526, @mheiber)
    - Add a test for the `enclosing` command (ocaml/merlin#1512)
voodoos added a commit to voodoos/opam-repository that referenced this pull request Nov 24, 2022
CHANGES:

Thu Nov 24 17:49:42 CEST 2022

  + merlin binary
    - Replace custom "holes" AST nodes by extensions. This restores binary
      compatibility and fixes issues with PPXs when using typed-holes.
      (ocaml/merlin#1503)
    - Do not change temporarily Merlin's cwd when starting a PPX (ocaml/merlin#1521,
      fixes ocaml/merlin#1420)
    - Fix a parsing issue when declaring the `(??)` custom prefix operator.
      (ocaml/merlin#1507, fixes ocaml/merlin#1506)
    - Fix variant constructors' comments grouping (ocaml/merlin#1516, @mheiber, fixes ocaml/merlin#1513)
    - Filter-out duplicates from the `enclosing` command result (ocaml/merlin#1512)
    - Add a new `verbosity=smart` mode for type enclosing that only expand
      modules' types (ocaml/merlin#1374, @ulugbekna)
    - Improve locate for labels' declarations in the current buffer.
      (ocaml/merlin#1505, fixes ocaml/merlin#1524)
    - Fix locate on module without implementation (ocaml/merlin#1522, fixes ocaml/merlin#1519)
    - Allow program name customization when merlin is used as a library. (ocaml/merlin#1532)
  + editor modes
    - vim: load the plugin when necessary if it wasn't loaded before (ocaml/merlin#1511)
    - emacs: update CI for newer releases and fix some warnings (ocaml/merlin#1454,
      @mattiase)
  + test suite
    - Add tests for constructors' documentation (ocaml/merlin#1511)
    - Add test cases for label comment documentation (ocaml/merlin#1526, @mheiber)
    - Add a test for the `enclosing` command (ocaml/merlin#1512)
    - Add tests for interactions between locate and record labels (ocaml/merlin#1505)
    - Add test showing an issue with locate and implicit transitive deps
voodoos added a commit to voodoos/opam-repository that referenced this pull request Nov 24, 2022
CHANGES:

  + merlin binary
    - Replace custom "holes" AST nodes by extensions. This restores binary
      compatibility and fixes issues with PPXs when using typed-holes.
      (ocaml/merlin#1503)
    - Do not change temporarily Merlin's cwd when starting a PPX (ocaml/merlin#1521,
      fixes ocaml/merlin#1420)
    - Fix a parsing issue when declaring the `(??)` custom prefix operator.
      (ocaml/merlin#1507, fixes ocaml/merlin#1506)
    - Fix variant constructors' comments grouping (ocaml/merlin#1516, @mheiber, fixes ocaml/merlin#1513)
    - Filter-out duplicates from the `enclosing` command result (ocaml/merlin#1512)
    - Add a new `verbosity=smart` mode for type enclosing that only expand
      modules' types (ocaml/merlin#1374, @ulugbekna)
    - Improve locate for labels' declarations in the current buffer.
      (ocaml/merlin#1505, fixes ocaml/merlin#1524)
    - Fix locate on module without implementation (ocaml/merlin#1522, fixes ocaml/merlin#1519)
    - Allow program name customization when merlin is used as a library. (ocaml/merlin#1532)
  + editor modes
    - vim: load the plugin when necessary if it wasn't loaded before (ocaml/merlin#1511)
    - emacs: update CI for newer releases and fix some warnings (ocaml/merlin#1454,
      @mattiase)
  + test suite
    - Add tests for constructors' documentation (ocaml/merlin#1511)
    - Add test cases for label comment documentation (ocaml/merlin#1526, @mheiber)
    - Add a test for the `enclosing` command (ocaml/merlin#1512)
    - Add tests for interactions between locate and record labels (ocaml/merlin#1505)
    - Add test showing an issue with locate and implicit transitive deps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Calling locate on a record is not precise enough

2 participants