LINUX.ORG.RU

Мощь LSP для анализа кода

 


0

3

Дано: большая чужая кодовая база на C++.

Хочется: указав две функции A и B, узнать, через какую последовательность функций A вызывает B, либо получить ответ, что «такого пути нет».

Понимаю, что могут быть извращения вроде «передали лямбдочку, которая вызывает B» или вызов функций через указатель и готов смириться с тем, что такое я статически не отловлю.

До сих пор довольствовался «найти, кто вызывает эту функцию» в редакторе через LSP, а теперь хотелось бы это заскриптовать: дать две пачки функций узнать, какие между ними есть связи.

Может быть $ apt info ccls?

Description: C/C++/ObjC language server
 This originates from cquery, and is a server implementing
 Language Server Protocol for C/C++/Objective-C. It supports:
 .
  * code completion (with both signature help and snippets)
  * definition/references, and other cross references
  * cross reference extensions:
    $ccls/call $ccls/inheritance $ccls/member $ccls/vars ...
  * formatting
  * hierarchies:
    call (caller/callee) hierarchy, inheritance (base/derived) hierarchy,
    member hierarchy
  * symbol rename
  * document symbols and approximate search of workspace symbol
  * hover information
  * diagnostics and code actions (clang FixIts)
  * semantic highlighting and preprocessor skipped regions
  * semantic navigation:
    $ccls/navigate

Зависит от libclang-cpp* и libllvm*.
Может и эти чем-то помогут:

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

Хотелось бы как раз положиться на существующий LSP и просто немного подергать его методы.

Т. е. по сути хочется реализации клиентской стороны LSP протокола, но что-то не находится.

kawaii_neko ★★★★
() автор топика

Должно быть что-то вроде call hierarchy.

kaldeon
()

Когда-то делал что-то подобное в качестве эксперимента, по сути нужно реализовать клиент LSP. Реализовывал на java, использовал библиотеку lsp4j. А так протокол простой, можно найти библиотеку или вручную сообщения записывать (jsonrpc), главное учесть жизненный цикл сервера, вызвать с нужными параметрами инициализацию.

xcariba ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.