wiki:WebKitEmacsTips

Version 5 (modified by Philippe Normand, 22 months ago) (diff)

--

Enabling the ccls LSP backend

If you're using spacemacs, enable the c-c++ layer in dotspacemacs-configuration-layers:

dotspacemacs-configuration-layers
   '(
       (c-c++ :variables
            c-c++-backend 'lsp-ccls
            c-c++-lsp-enable-semantic-highlight 'rainbow)
       ...
)

And then in dotspacemacs/user-config:

  (dir-locals-set-class-variables
     'webkit-instance
     '((nil . ((c-basic-offset . 4)
               (indent-tabs-mode . nil)
               (fill-column . 100)
               (ccls-executable . "webkit-ccls")
               (projectile-project-name . "WebKit")
               (lsp-enable-file-watchers . nil)
               (lsp-ui-peek-find-references nil (list :folders (vector (projectile-project-root))))
               ))
       (prog-mode (ccls-initialization-options . (:compilationDatabaseDirectory "/app/webkit/WebKitBuild/Release"
                                                  :cache (:directory ".ccls-cache")
                                                  ))
  )))
(dir-locals-set-directory-class
     "/home/phil/WebKit/" 'webkit-instance)

DO NOT CHANGE /app/webkit/WebKitBuild in compilationDatabaseDirectory because it refers to the standard Flatpak SDK sandbox path.

Then add a new executable script in your PATH, called webkit-ccls with the following contents (YMMV):

#!/bin/sh
set -eu
cd $HOME/WebKit/
exec Tools/Scripts/webkit-flatpak -c ccls "$@"

If you are running a Fedora Silverblue host OS, make sure the Emacs flatpak app is called with the --talk-name=org.freedesktop.Flatpak argument. Then, the webkit-ccls contents should rather be:

set -eu
cd $HOME/WebKit/
exec flatpak-spawn --host Tools/Scripts/webkit-flatpak -c ccls "$@"

Most WebKit header files don't include config.h, which tricks LSP to grey out all file contents in the editor. To fix this, add a .ccls file in your WebKit checkout:

%compile_commands.json
%h -x
%h c++-header
%h --include=config.h
%cpp --include=config.h

Enabling the clangd LSP backend

If you're using spacemacs, enable the c-c++ layer in dotspacemacs-configuration-layers:

dotspacemacs-configuration-layers
   '(
       (c-c++ :variables
            c-c++-backend 'lsp-clangd
            c-c++-lsp-enable-semantic-highlight 'rainbow)
       ...
)

And then in dotspacemacs/user-config:

  (dir-locals-set-class-variables
     'webkit-instance
     '((nil . ((c-basic-offset . 4)
               (indent-tabs-mode . nil)
               (fill-column . 100)
               (lsp-clients-clangd-executable . "/home/phil/WebKit/Tools/flatpak/webkit-clangd")
               (lsp-clients-clangd-args . ("--enable-config"
                                           "--gtk"
                                           ))
               (projectile-project-name . "WebKit")
               (lsp-enable-file-watchers . nil)
               (lsp-ui-peek-find-references nil (list :folders (vector (projectile-project-root))))
               ))
        )
     )

(dir-locals-set-directory-class
     "/home/phil/WebKit/" 'webkit-instance)