Skip to content

Fix bugs on signature help about labelled and optional parameters#2032

Merged
voodoos merged 4 commits intoocaml:mainfrom
Lucccyo:sig_help_opt_arguments
Feb 18, 2026
Merged

Fix bugs on signature help about labelled and optional parameters#2032
voodoos merged 4 commits intoocaml:mainfrom
Lucccyo:sig_help_opt_arguments

Conversation

@Lucccyo
Copy link
Copy Markdown
Contributor

@Lucccyo Lucccyo commented Feb 6, 2026

When a labelled argument is initiated, signature-help always displays the first labelled argument in the signature, even if it has already been written.
A hierarchy is processed: the list of arguments is first the labelled ones, then the optional ones.
As it always takes the first one, no matter what has already been written, optional arguments are never highlighted, even if they are initiated with a ~.

In the following example, the cursor is after the second ~ on line 2.
Signature-help should set y as the active parameter, since x is already written, but it still highlights x.

let f a ~x ~y t = (a, y, x, t)
let _ = f ~x:43 ~ 1

This PR fixes this wrong behaviour.

@Lucccyo Lucccyo force-pushed the sig_help_opt_arguments branch from 2b8b73e to adf4b9c Compare February 6, 2026 10:43
@voodoos
Copy link
Copy Markdown
Collaborator

voodoos commented Feb 6, 2026

Look slike this also has an effect on another signature help test:
image

Is that an improvement or a regression ?

@Lucccyo Lucccyo force-pushed the sig_help_opt_arguments branch from adf4b9c to f5d7adb Compare February 6, 2026 13:57
@Lucccyo
Copy link
Copy Markdown
Contributor Author

Lucccyo commented Feb 6, 2026

It can make the labelled parameter active.
- $ $MERLIN single signature-help -position 2:14 <<EOF
+ $ $MERLIN single signature-help -position 2:15 <<EOF
  > let map = ListLabels.map
  > let _ = map ~f:Int.abs
  > EOF

To make this test correct, the cursor must be placed after the :. The label ~f on its own is a valid parameter and will set the active_parameter to the next argument. However, if the cursor is set after the :, ~f: is no longer a complete parameter. In this case, the active_parameter remains on f, waiting for the value provided after the :.

@Lucccyo Lucccyo force-pushed the sig_help_opt_arguments branch from f5d7adb to 403c8f5 Compare February 6, 2026 14:09
Copy link
Copy Markdown
Collaborator

@voodoos voodoos left a comment

Choose a reason for hiding this comment

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

Thanks, looks reasonable. one last comment... and we need a changelog entry :-)

@Lucccyo Lucccyo force-pushed the sig_help_opt_arguments branch from 403c8f5 to 78fa4ab Compare February 6, 2026 14:19
@Lucccyo Lucccyo force-pushed the sig_help_opt_arguments branch from 78fa4ab to 2953dd5 Compare February 6, 2026 14:22
@voodoos
Copy link
Copy Markdown
Collaborator

voodoos commented Feb 18, 2026

Thanks @Lucccyo !

@voodoos voodoos merged commit a5f0417 into ocaml:main Feb 18, 2026
6 of 8 checks passed
voodoos added a commit to voodoos/opam-repository that referenced this pull request Apr 9, 2026
CHANGES:

Thu Apr 09 09:59:38 WAT 2026

  + merlin library
    - Implement new refactor-extract-region command for extracting region to a fresh let binding (warning: this feature is still experimental) (ocaml/merlin#1948)
    - Add "Other" variant to locate-types result (ocaml/merlin#2025)
    - Don't include `option` in locate-types result for optional parameters (ocaml/merlin#2027)
    - Fix record field autocompletion (ocaml/merlin#2028)
    - Signature help should not loop over the parameters once it is finished (ocaml/merlin#2023)
    - Fix bugs on signature help about labelled and optional parameters (ocaml/merlin#2032)
    - Add `-end-position` parameter for `enclosing` (ocaml/merlin#2029)
    - Signature help should appear even if the 'in' is not written (ocaml/merlin#2036)
    - Improve type enclosing behavior on various class and object related items
      (ocaml/merlin#2053)
  + merlin binary
    - Define PATH_MAX to 4096 if undefined (eg. hurd) (ocaml/merlin#2039)
  + test suite
    - Add a reproduction case for ocaml/merlin#1214, the issue has been resolved before (ocaml/merlin#2022)
    - Add reproduction case for ocaml/merlin#1763 but it is not failing anymore (ocaml/merlin#2021)
    - Add a test to reproduce [Locate command fails on multi-line type definitions](ocaml/merlin#1987) (ocaml/merlin#2020)
    - Add a regression test for issue ocaml/merlin#2019 (ocaml/merlin#2030)

merlin 5.6.1
Sat Dec 20 11:15:42 CET 2025

  + merlin binary
    - Fix a plethora of minor issues with the C code (ocaml/merlin#1998)
  + merlin library
    - Signature help should not appear on the function name (ocaml/merlin#1997)
    - Fix completion not working for inlined records labels (ocaml/merlin#1978, fixes ocaml/merlin#1977)
    - Perform buffer indexing only if the query requires it (ocaml/merlin#1990 and ocaml/merlin#1991)
    - Stop unnecessarily forcing substitutions when initializing short-paths graph (ocaml/merlin#1988)
    - Fix Mocaml.with_printer didn't update replacement_printer_doc (ocaml/merlin#2010)
  + test suite
    - Add a test to ensure the behavior showed in issue ocaml/merlin#1517 is no longer relevant (ocaml/merlin#1995)
    - Add a test to ensure the code fragment exhibited in issue ocaml/merlin#1118 no longer makes Merlin crash (ocaml/merlin#1996)
    - Add a test case illustrating how a snippet produces two unrelated errors in issue ocaml/merlin#2000. (ocaml/merlin#2003)
    - Add a test reproducing issue ocaml/merlin#1983 where `document` command which sometime concatenates consecutive variants and labels (ocaml/merlin#2005)
    - Signature-help should trigger on unfinished `let ... in` bindings (ocaml/merlin#2009)

merlin 5.6
Sat Oct 04 15:10:42 CEST 2025

  + merlin binary
    - Add `locate-types` command (ocaml/merlin#1951)
  + merlin library
    - Implement new refactor-extract-region command for extracting region to a fresh let binding (ocaml/merlin#1948)
    - Fix `merlin_reader` for OpenBSD (ocaml/merlin#1956)
    - Improve recovery of mutually recursive definitions (ocaml/merlin#1962, ocaml/merlin#1963, fixes ocaml/merlin#1953)
    - Support for OCaml 5.4 (ocaml/merlin#1974)
  + vim plugin
    - Fix error when `:MerlinOccurrencesProjectWide` fails to gather code previews (ocaml/merlin#1970)
  + test suite
    - Add more short-paths tests cases (ocaml/merlin#1904)
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.

2 participants