cquery call/member/inheritance hierarchy

终于有人(topisani)终于给cquery加树了 https://github.com/cquery-project/emacs-cquery/blob/master/cquery-member-hierarchy.el (elisp不好就只能等别人实现主要功能后自己做些修修补补了T_T)

  • caller/callee hierarchy
  • member hierarchy
  • inheritance hierarchy (base/derived)

member hierarchy还不准确,很多模板展开不了。

关注 Make lsp-ui-imenu hierarchical · Issue #73 · emacs-lsp/lsp-ui · GitHub

我的配置

    (dolist (mode c-c++-modes)
      (spacemacs/set-leader-keys-for-major-mode mode
        "lb" #'cquery/base
        "lc" #'cquery/callers
        "ld" #'cquery/derived
        "lR" #'cquery-freshen-index
        "lv" #'cquery/vars
        "l SPC" #'cquery/random
        "a" #'cquery/references-address
        "r" #'cquery/references-read
        "w" #'cquery/references-write
        "m" #'cquery-member-hierarchy
        ;; bases
        "i" #'cquery-inheritance-hierarchy
        ;; derived
        "I" (lambda () (interactive) (cquery-inheritance-hierarchy t))
        ;; callers
        "c" #'cquery-call-hierarchy
        ;; callees
        "C" (lambda () (interactive) (cquery-call-hierarchy t))
        ))
2 个赞

image 我在windows上使用这个tree功能时,折叠符号显示乱码,想请教如何解决,多谢

这些符号是utf-8

image

我看lisp插件里也是乱码的,是用utf-8-dos打开的

装 powerline 字体。

刚刚扩展了 $cquery/memberHierarchyInitial,可用于函数列出参数和局部变量 Make cquery-member-hierarchy expand 1 level for functions · Issue #20 · cquery-project/emacs-cquery · GitHub

还是最希望有人能把这个捡起来扔到 lsp-ui 里去,然后号召其他语言也实现类似的hierarchy (我向haskell-ide-engine布道多次了。。然而他们现在 references 也没有),等Microsoft lsp会很慢。

今天还是昨天reddit r/emacs有人称赞 sebastiencs GitHub - sebastiencs/sidebar.el: A customizable file explorer with git integration for emacs 了……(最希望他能把这个弄起来,但他用的 rls + lsp-rust 没有 T_T)

感谢您的建议,我装了一个powerline字体,并且在emacs里修改了默认字体后, 还是乱码,求助

@MaskRay 卧槽,你这用的什么鬼字符?我在 macOS 上也显示不出来。如果用了 all-the-icons 至少要在 README 上标出来,不是人人都用这个的。最好给个自定义。

再试试这里的几个字体吧……应该是 GitHub Octicons 吧。

这不是我写的……我只是做些修补让这个东西适应cquery server接口

刚刚模仿了 ivy.el 添加了cquery-tree--calling

cquery-tree-mode里每个节点对应一个文件和位置 在cquery-tree-mode窗口里移动时,希望上下移动时自动在other-window里跳转到相应位置

想实现成ivy-call的效果:

  • cquery-tree-next-line cquery-tree-prev-line时在other-window跳转,但不要记录到evil-jumps
  • q后恢复原始位置
  • 如果按RET则仿ivy-occur-press-and-switch,切换window,并记录evil-jumps

RET时还要用上两个hack:

  • (when (featurep 'evil-jumps) (lsp-ui-peek--with-evil-jumps (evil-set-jump)))设置cross reference的jump list,用于lsp-ui-peek-jump-{forward,backward}
  • 跳转到项目外的文件需要:
(unless lsp--cur-workspace
              (setq lsp--cur-workspace current-workspace))
            (unless lsp-mode
              (lsp-mode 1)
              (lsp-on-open))

怎么做呢?https://github.com/cquery-project/emacs-cquery/blob/master/cquery-tree.el#L252

弄了一个 https://github.com/cquery-project/emacs-cquery/blob/master/cquery-tree.el#L314