rust icon indicating copy to clipboard operation
rust copied to clipboard

Better reporting on generic argument mismatchs

Open strottos opened this issue 1 year ago • 7 comments

This allows better reporting as per issue #116615 .

If you have a function:

fn foo(a: T, b: T) {}

and call it like so:

foo(1, 2.)

it'll give improved error reported similar to the following:

error[E0308]: mismatched types
 --> generic-mismatch-reporting-issue-116615.rs:6:12
  |
6 |     foo(1, 2.);
  |     --- -  ^^ expected integer, found floating-point number
  |     |   |
  |     |   expected argument `b` to be an integer because that argument needs to match the type of this parameter
  |     arguments to this function are incorrect
  |
note: function defined here
 --> generic-mismatch-reporting-issue-116615.rs:1:4
  |
1 | fn foo<T>(a: T, b: T) {}
  |    ^^^ -  ----  ----
  |        |  |     |
  |        |  |     this parameter needs to match the integer type of `a`
  |        |  `b` needs to match the type of this parameter
  |        `a` and `b` all reference this parameter T

Open question, do we need to worry about error message translation into other languages? Not sure what the status of that is in Rust.

NB: Needs some checking over and some tests have altered that need sanity checking, but overall this is starting to get somewhere now. Will take out of draft PR status when this has been done, raising now to allow feedback at this stage, probably 90% ready.

strottos avatar Feb 25 '24 17:02 strottos

r? @nnethercote

rustbot has assigned @nnethercote. They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

rustbot avatar Feb 25 '24 17:02 rustbot

r? @compiler-errors

who is a better reviewer for this and is already providing comments.

nnethercote avatar Feb 26 '24 08:02 nnethercote

Fixed the other tests that weren't showing up correctly. I still think I'd like to do a proper review myself before taking this out of Draft status, but I believe this is at least working as expected (even if the code isn't 100% there yet).

strottos avatar Feb 26 '24 21:02 strottos

:umbrella: The latest upstream changes (presumably #121489) made this pull request unmergeable. Please resolve the merge conflicts.

bors avatar Feb 28 '24 23:02 bors

Just pushed the latest changes. I think this is better now, might be a few tweaks but hopefully this is closer to the right way to implement this. Will have a look over this again myself next week to see if other improvements can be made and then will take it out of draft status if it looks reasonable.

strottos avatar Mar 03 '24 14:03 strottos

The job mingw-check-tidy failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
Getting action download info
Download action repository 'msys2/[email protected]' (SHA:cc11e9188b693c2b100158c3322424c4cc1dadea)
Download action repository 'actions/checkout@v4' (SHA:b4ffde65f46336ab88eb53be808477a3936bae11)
Download action repository 'actions/upload-artifact@v3' (SHA:a8a3f3ad30e3422c9c7b888a15615d19a852ae32)
Complete job name: PR - mingw-check-tidy
git config --global core.autocrlf false
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
---
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=strottos
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_162d687e-b24d-42f4-bcf4-8d83ee1a35a9
GITHUB_EVENT_NAME=pull_request
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=5f5888188ccf23c9cb7ef92f21fca844f1a659ba
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_162d687e-b24d-42f4-bcf4-8d83ee1a35a9
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_162d687e-b24d-42f4-bcf4-8d83ee1a35a9
GITHUB_TRIGGERING_ACTOR=strottos
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/121595/merge
GITHUB_WORKFLOW_SHA=5f5888188ccf23c9cb7ef92f21fca844f1a659ba
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_20_X64=/opt/hostedtoolcache/go/1.20.14/x64
---
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh

COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt \
    && pip3 install virtualenv
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/

# NOTE: intentionally uses python2 for x.py so we can test it still works.
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
           --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
#    pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---

#10 [5/8] COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
#10 DONE 0.0s

#11 [6/8] RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt     && pip3 install virtualenv
#11 0.601   Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB)
#11 0.620 Collecting boolean-py==4.0
#11 0.627   Downloading boolean.py-4.0-py3-none-any.whl (25 kB)
#11 0.645 Collecting chardet==5.1.0
---
#11 3.803 Building wheels for collected packages: reuse
#11 3.804   Building wheel for reuse (pyproject.toml): started
#11 4.139   Building wheel for reuse (pyproject.toml): finished with status 'done'
#11 4.140   Created wheel for reuse: filename=reuse-1.1.0-cp310-cp310-manylinux_2_35_x86_64.whl size=181117 sha256=f5f58750481f69515c2c0d1d503daf565e2565c370d07fc6aeb95fe3498b4269
#11 4.141   Stored in directory: /tmp/pip-ephem-wheel-cache-y8nt_p_0/wheels/c2/3c/b9/1120c2ab4bd82694f7e6f0537dc5b9a085c13e2c69a8d0c76d
#11 4.143 Installing collected packages: boolean-py, binaryornot, setuptools, reuse, python-debian, markupsafe, license-expression, jinja2, chardet
#11 4.165   Attempting uninstall: setuptools
#11 4.165     Found existing installation: setuptools 59.6.0
#11 4.166     Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
#11 4.166     Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
#11 4.167     Can't uninstall 'setuptools'. No files were found to uninstall.
#11 4.837 Successfully installed binaryornot-0.4.4 boolean-py-4.0 chardet-5.1.0 jinja2-3.1.2 license-expression-30.0.0 markupsafe-2.1.1 python-debian-0.1.49 reuse-1.1.0 setuptools-66.0.0
#11 4.837 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#11 5.367 Collecting virtualenv
#11 5.425   Downloading virtualenv-20.25.1-py3-none-any.whl (3.8 MB)
#11 5.605      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 21.3 MB/s eta 0:00:00
#11 5.644 Collecting distlib<1,>=0.3.7
#11 5.651   Downloading distlib-0.3.8-py2.py3-none-any.whl (468 kB)
#11 5.694 Collecting filelock<4,>=3.12.2
#11 5.702   Downloading filelock-3.13.1-py3-none-any.whl (11 kB)
#11 5.702   Downloading filelock-3.13.1-py3-none-any.whl (11 kB)
#11 5.733 Collecting platformdirs<5,>=3.9.1
#11 5.741   Downloading platformdirs-4.2.0-py3-none-any.whl (17 kB)
#11 5.824 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#11 5.987 Successfully installed distlib-0.3.8 filelock-3.13.1 platformdirs-4.2.0 virtualenv-20.25.1
#11 DONE 6.1s

#12 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#12 DONE 0.0s
---
DirectMap4k:      171968 kB
DirectMap2M:     7168000 kB
DirectMap1G:    11534336 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test            --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
    Finished dev [unoptimized] target(s) in 0.03s
##[endgroup]
downloading https://ci-artifacts.rust-lang.org/rustc-builds-alt/9e73597e5a83e96e223c10b3810566c74a86a0c1/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz
extracting /checkout/obj/build/cache/llvm-9e73597e5a83e96e223c10b3810566c74a86a0c1-true/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz to /checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm
---
##[endgroup]
fmt check
tidy check
tidy: Skipping binary file check, read-only filesystem
##[error]tidy error: /checkout/compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs:2224: TODO is used for tasks that should be done before merging a PR; If you want to leave a message in the codebase use FIXME
removing old virtual environment
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10'
Requirement already satisfied: pip in ./build/venv/lib/python3.10/site-packages (24.0)
Collecting black==23.3.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 7))
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 21.6 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 21.6 MB/s eta 0:00:00
Collecting click==8.1.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 34))
  Downloading click-8.1.3-py3-none-any.whl (96 kB)
Collecting importlib-metadata==6.7.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 38))
  Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
  Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Collecting mypy-extensions==1.0.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 42))
  Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Collecting packaging==23.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 46))
  Downloading packaging-23.1-py3-none-any.whl (48 kB)
Collecting pathspec==0.11.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 50))
  Downloading pathspec-0.11.1-py3-none-any.whl (29 kB)
  Downloading pathspec-0.11.1-py3-none-any.whl (29 kB)
Collecting platformdirs==3.6.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 54))
  Downloading platformdirs-3.6.0-py3-none-any.whl (16 kB)
Collecting ruff==0.0.272 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 58))
  Downloading ruff-0.0.272-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)
Collecting tomli==2.0.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 77))
  Downloading tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting typed-ast==1.5.4 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 81))
  Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
  Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 877.7/877.7 kB 75.3 MB/s eta 0:00:00
Collecting typing-extensions==4.6.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 107))
  Downloading typing_extensions-4.6.3-py3-none-any.whl (31 kB)
Collecting zipp==3.15.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 114))
  Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
Installing collected packages: zipp, typing-extensions, typed-ast, tomli, ruff, platformdirs, pathspec, packaging, mypy-extensions, click, importlib-metadata, black
Successfully installed black-23.3.0 click-8.1.3 importlib-metadata-6.7.0 mypy-extensions-1.0.0 packaging-23.1 pathspec-0.11.1 platformdirs-3.6.0 ruff-0.0.272 tomli-2.0.1 typed-ast-1.5.4 typing-extensions-4.6.3 zipp-3.15.0
some tidy checks failed
Build completed unsuccessfully in 0:01:02
  local time: Sun Mar  3 14:50:14 UTC 2024
  network time: Sun, 03 Mar 2024 14:50:14 GMT

rust-log-analyzer avatar Mar 03 '24 14:03 rust-log-analyzer

@rustbot author - marking as waiting on author until you've done that self-review

compiler-errors avatar Mar 12 '24 18:03 compiler-errors

I believe this is better now. I'm happy for this to be reviewed again.

Thanks for bearing with me while I found time to sort this properly.

strottos avatar Mar 15 '24 15:03 strottos

@bors r+

compiler-errors avatar Apr 03 '24 19:04 compiler-errors

:pushpin: Commit 8a5245e7dd006e2eb6bf6d3834b05772285efe28 has been approved by compiler-errors

It is now in the queue for this repository.

bors avatar Apr 03 '24 19:04 bors