QDoc: Report duplicate warnings only once
When a project produces multiple output formats, the same broken link
can generate a warning for each format. These duplicates clutter the
warning log and can make a project exceed its warning limit even
though it has only one broken link.
This makes QDoc report an identical warning once per project run.
Distinct warnings remain visible, and the warning count reflects the
diagnostics users actually see.
Fixes: QTBUG-151404
Pick-to: 6.12
Change-Id: I358b3213e6905073b174a0abe2e1c4649c82ce1f
Reviewed-by: Topi Reinio <topi.reinio@qt.io>
| commit | d28eebecafde9b9b9730fcfb4f51e2d4413fa112 |
| parent | 3496da5f911438e218ba313ac18a18ae80ca322f |
| author | Paul Wicking <paul.wicking@qt.io> |
| committer | Paul Wicking <paul.wicking@qt.io> |
| commit time | Thu, 15 Oct 2026 07:46:33 +0000 |
- M src/qdoc/qdoc/src/qdoc/location.cpp
- M src/qdoc/qdoc/src/qdoc/location.h
- M src/qdoc/qdoc/tests/qdoc/CMakeLists.txt
- A src/qdoc/qdoc/tests/qdoc/location/catch_location.cpp
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/duplicate_warning_all_formats.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/expect-stderr-contains
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/expected/html-legacy/DuplicateWarningAllFormats-qdoc-warnings.log
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/expected/html-legacy/duplicatewarningallformats.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/expected/html-legacy/warning-dup.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/expected/html/warning-dup.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/expected/markdown/warning-dup.md
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_all_formats/src/duplicate_warning_all_formats.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_distinct/duplicate_warning_distinct.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_distinct/expect-stderr-contains
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_distinct/expected/DuplicateWarningDistinct-qdoc-warnings.log
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_distinct/expected/duplicatewarningdistinct.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_distinct/expected/html/warning-distinct.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_distinct/src/duplicate_warning_distinct.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_html/duplicate_warning_html.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_html/expect-stderr-contains
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_html/expected/html/DuplicateWarningHtml-qdoc-warnings.log
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_html/expected/html/duplicatewarninghtml.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_html/expected/html/warning-dup.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_html/src/duplicate_warning_html.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/duplicate_warning_render_failure.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expect-nonzero-exit
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expect-stderr-contains
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expected/html-legacy/DuplicateWarningRenderFailure-qdoc-warnings.log
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expected/html-legacy/duplicatewarningrenderfailure.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expected/html-legacy/duprenderfailure-module.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expected/html-legacy/page.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expected/html/duprenderfailure-module.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expected/html/page.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/expected/markdown/page.md
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/src/module.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/src/page.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/template/collection.md
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_render_failure/template/page.md
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatehtml/duplicate_warning_templatehtml.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatehtml/expect-stderr-contains
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatehtml/expected/DuplicateWarningTemplateHtml-qdoc-warnings.log
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatehtml/expected/duplicatewarningtemplatehtml.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatehtml/expected/html/warning-dup.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatehtml/src/duplicate_warning_templatehtml.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatemarkdown/duplicate_warning_templatemarkdown.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatemarkdown/expect-stderr-contains
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatemarkdown/expected/DuplicateWarningTemplateMarkdown-qdoc-warnings.log
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatemarkdown/expected/duplicatewarningtemplatemarkdown.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatemarkdown/expected/markdown/warning-dup.md
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_templatemarkdown/src/duplicate_warning_templatemarkdown.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/args.txt
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/duplicate_warning_two_projects.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expect-nonzero-exit
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expect-stderr-contains
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningfirst/html-legacy/duplicatewarningfirst.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningfirst/html-legacy/first.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningfirst/html/first.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningfirst/markdown/first.md
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningsecond/html-legacy/duplicatewarningsecond.index
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningsecond/html-legacy/second.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningsecond/html/second.html
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/expected/duplicatewarningsecond/markdown/second.md
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/first.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/second.qdocconf
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/src/first/first.qdoc
- A src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/duplicate_warning_two_projects/src/second/second.qdoc
- M src/qdoc/qdoc/tests/validatetemplategeneratoroutput/testdata/member_link_context/expected/html-legacy/MemberLinkContext-qdoc-warnings.log