給ccls(language server)加了$ccls/navigate
。
給emacs-ccls (language client)加了
(defun ccls-navigate (direction)
"Navigate to a nearby outline symbol.
DIRECTION can be \"D\", \"L\", \"R\" or \"U\"."
(lsp-find-custom "$ccls/navigate" `(:direction ,direction)))
這個思路也能用於其他language server。
(ccls-navigate "U")
(ccls-navigate "D")
(ccls-navigate "L")
(ccls-navigate "R")
lsp-mode沒有實現hierarchicalDocumentSymbolSupport
,所以沒有textDocument/documentSymbol
的層次結構。C/C++ declaration可以和definition分離,可以redeclarable (比如namespace可以出現多次),parent有lexical/semantic兩類,我還沒有想清楚如果要實現層次結構應該怎麼做。但這個移動基本能滿足我的需求了。ccls邏輯https://github.com/MaskRay/ccls/blob/master/src/messages/ccls_navigate.cc
相關:
spacemacs裏有人要加ccls/cquery到c-c++ layer了 https://github.com/syl20bnr/spacemacs/pull/11242,他要定製這麼多東西我不太適應。
週末另外實現了index.multiVersion,一個檔案可以被檢索多次獲得期中的所有引用了(比如#ifdef #else #endif的兩段,或者dependent name lookup等)
{
"index": {
"multiVersion": 1,
"multiVersionBlacklist": ["^/usr/include"]
}
}