microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
163.74k stars 29.09k forks source link

Inconsistent dropping of problem markers #186604

Open mark-christiaens opened 1 year ago

mark-christiaens commented 1 year ago

Type: Bug

When many problems are reported by the language server, VS Code will limit the number of problems that are actually reported. There are (at least) two locations where the number of problems are topped off:

_updateDecorations limits the number of problems (diagnostics) to 1000. If more are provided by the language server, then these are dropped and replaced by a single problem report stating that some additional problems were dropped.

set enforces a tighter limit. At most 500 marker decorations are applied in the editor. The rest are (silently) dropped.

I think it would be best if both limits would be identical (and derived from the same constant). As it stands, you'll see more problems in the problems view than those who are actual decorated in the editor. In addition, the problem markers that are dropped from the editor seem randomly selected (there is a logic to it but it's not obvious to the end-user). This gives the feel that the problem markers are buggy.

Bonus points for making this limit configurable.

VS Code version: Code 1.79.2 (695af097c7bd098fbf017ce3ac85e09bbc5dda06, 2023-06-14T08:59:55.818Z) OS version: Linux x64 6.3.8-200.fc38.x86_64 Modes:

System Info |Item|Value| |---|---| |CPUs|Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz (8 x 4600)| |GPU Status|2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
video_decode: enabled
video_encode: disabled_software
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: disabled_off| |Load (avg)|0, 0, 0| |Memory (System)|31.25GB (10.40GB free)| |Process Argv|. --crash-reporter-id f404ea47-2d17-4a9c-918b-afa944f69dcc| |Screen Reader|no| |VM|0%| |DESKTOP_SESSION|gnome| |XDG_CURRENT_DESKTOP|GNOME| |XDG_SESSION_DESKTOP|gnome| |XDG_SESSION_TYPE|wayland|
Extensions (33) Extension|Author (truncated)|Version ---|---|--- vscode-languagetool|ada|3.8.0 vscode-languagetool-en|ada|3.8.0 All-Autocomplete|Ati|0.0.26 spellright|ban|3.0.116 vscode-markdownlint|Dav|0.51.0 haskell|has|2.2.4 ormolu|ily|0.0.12 language-haskell|jus|3.6.0 lean4|lea|0.0.104 isort|ms-|2022.8.0 python|ms-|2023.10.1 vscode-pylance|ms-|2023.6.40 jupyter|ms-|2023.5.1101742258 jupyter-keymap|ms-|1.1.2 jupyter-renderers|ms-|1.0.15 vscode-jupyter-cell-tags|ms-|0.1.8 vscode-jupyter-slideshow|ms-|0.1.5 remote-ssh|ms-|0.102.0 remote-ssh-edit|ms-|0.86.0 remote-explorer|ms-|0.4.0 vsliveshare|ms-|1.0.5873 lsp-inspector-webview|oct|0.0.2 java|red|1.19.0 rust-analyzer|rus|0.3.1566 sigasi-vscode|sig|5.2.0 intellicode-api-usage-examples|Vis|0.2.7 vscodeintellicode|Vis|1.2.30 vscode-java-debug|vsc|0.51.0 vscode-java-dependency|vsc|0.23.0 vscode-java-pack|vsc|0.25.11 vscode-java-test|vsc|0.39.0 vscode-maven|vsc|0.41.0 markdown-all-in-one|yzh|3.5.1
A/B Experiments ``` vsliv368:30146709 vsreu685:30147344 python383cf:30185419 vspor879:30202332 vspor708:30202333 vspor363:30204092 vslsvsres303:30308271 vserr242cf:30382550 pythontb:30283811 vsjup518:30340749 pythonptprofiler:30281270 vshan820:30294714 vstes263:30335439 vscoreces:30445986 vscod805:30301674 binariesv615:30325510 bridge0708:30335490 bridge0723:30353136 vsaa593:30376534 pythonvs932:30410667 py29gd2263:30776702 vsclangdf:30486550 c4g48928:30535728 dsvsc012cf:30540253 pynewext54:30695312 azure-dev_surveyone:30548225 2e4cg342:30602488 pyind779:30671433 f6dab269:30613381 pythonsymbol12:30671437 showlangstatbar:30737416 vsctsb:30748421 pythonms35:30701012 03d35959:30757346 pythonfmttext:30731395 pythoncmvfstrcf:30756944 fixshowwlkth:30771522 hideindicator:30766889 pythongtdpath:30769146 gsof1:30774496 dh2dc718:30776458 pythonidxptcf:30772540 pythondjangots:30772535 pythonnocebcf:30776496 ```
jrieken commented 1 year ago

I think it would be best if both limits would be identical (and derived from the same constant).

Even that's won't be the final solution because there can be N diagnostics collections that all contribute M diagnostics to one file