Почему Clangd не находит все ссылки?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему Clangd не находит все ссылки?

Сообщение Anonymous »

У меня есть проект C ++, построенный с Cmake, и файл compile_commands.json создан как часть сборки. goto_definition и ссылки Работайте, как и ожидалось, но некоторые сгенерированные исходные файлы не могут быть найдены, пока я не открою их вручную с помощью моего редактора.
Файлы исходного кода:
  • /my_repo/base/src/a.hh (объявляет get_bananas () )
  • /my_repo/base/src/a.cc (определяет get_bananas () )
Некоторые файлы cc файлы генерируются на шаге сборки (Cmake+Ninja+Python) и положить в папку сборки: < /p>
  • /my_repo/base/build/generated/gen_a_usage.cc (вызовы get_bananas () )
, когда я выполняю LSP-call selicements () , чтобы попытаться найти Ссылки от A.CC или a.hh Использования в файле Gen_a_usage.cc не указаны.
Как я могу выяснить, почему я Не можете найти gen_a_usage.cc? После того, как я открыл этот файл из папки сборки в моем редакторе, ссылки () Начните перечислять ссылки и в этом файле.
В действительности проект намного больше, чем Просто эти три файла. Оба a.cc имеют записи и gen_a_usage.cc есть записи в compile_commands.json файл. Или не удается?{
"directory": "/my_repo/base/build",
"command": "clang-wrapper-19.1.1/bin/clang++ -I/my_repo/base/build/generated -I/my_repo/base/src -I... -isystem ... -Og -g -std=gnu++20 -fPIC -Wall -Wextra -Wformat-signedness -ggdb -fcolor-diagnostics -o CMakeFiles/objects.dir/src/a.cc.o -c /my_repo/base/src/a.cc",
"file": "/my_repo/base/src/a.cc",
"output": "CMakeFiles/objects.dir/src/a.cc.o"
},
{
"directory": "/my_repo/base/build",
"command": "clang-wrapper-19.1.1/bin/clang++ -I/my_repo/base/build/generated -I/my_repo/base/src -I... -isystem ... -Og -g -std=gnu++20 -fPIC -Wall -Wextra -Wformat-signedness -ggdb -fcolor-diagnostics -o CMakeFiles/objects.dir/src/gen_a_usage.cc.o -c /my_repo/base/build/generated/gen_a_usage.cc",
"file": "/my_repo/base/build/generated/gen_a_usage.cc",
"output": "CMakeFiles/objects.dir/src/gen_a_usage.cc.o"
},

clangd docs
clangd имеет эту информацию (см. return-all-references-for-a-symbol) < /p>

Одна из потенциальных причин заключается в том, что Clangd не индексировал все файлы в вашем проекте. Пожалуйста, убедитесь, что все файлы видны для Clangd через настройку проекта и Compile_commands.json. Просто то, что путь файла CC указан явно где -то в файле JSON? Сделано с Cmake + Ninja < /li>
После сборки я запускаю мой редактор (neovim) < /li>
lsp (clangd) запускается с этой конфигурацией:
lsp.clangd.setup { cmd = {"clangd", "--clang-tidy", "--background-index", "--limit-references=0", "--cross-file-rename"}}
< /code>
< /li>
< /ul>
Я видел это поведение в Clangd версии 16, 19 и 20. и у моего коллега есть аналогичные проблемы в Vscode . < /p>
lsplog имеет эту информацию < /h1>
ASTWorker building file /local/david/cs/feature/base/components/future_sonic/sim3/src/dispatch_uop_base.cc version 0 with command \n[/my_repo/base/build/generated -I/my_repo/base/src -I... -isystem ... -Og -g -std=gnu++20 -fPIC -Wall -Wextra -Wformat-signedness -ggdb -fcolor-diagnostics -o CMakeFiles/objects.dir/src/a.cc.o -c clang-19.1.1/lib/clang/19 -- /my_repo/base/src/a.cc\n"
Loaded compilation database from /my_repo/base/build/compile_commands.json\n"
--> window/workDoneProgress/create(0)\n"
Enqueueing 930 commands for indexing\n"
$/progress\nI[11:45:43.742] --> $/progress\n"
Built preamble of size 21624316 for file /my_repo/base/components/future_sonic/sim3/src/dispatch_uop_base.cc version 0 in 1.46 seconds\n"
--> workspace/semanticTokens/refresh(1)\n"
Indexing c++20 standard library in the context of /my_repo/base/components/future_sonic/sim3/src/dispatch_uop_base.cc\n"
reply:textDocument/references(2) 0 ms\n"
--> $/progress\n"
--> $/progress\nI[11:45:51.571] --> $/progress\nI[11:45:51.571] --> $/progress\n"
Indexed /my_repo/base/components/future_sonic/sim3/src/dispatch.cc (136 symbols, 18679 refs, 475 files)\n"
--> $/progress\n"
Indexed /my_repo/base/components/future_sonic/sim3/src/fetch.cc (141 symbols, 18527 refs, 463 files)\n"
--> $/progress\n"


Подробнее здесь: https://stackoverflow.com/questions/794 ... references
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»