clangd / vscode-clangd

Visual Studio Code extension for clangd
https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd
MIT License
594 stars 97 forks source link

Qt includes not found #550

Closed MichaelVoelkel closed 7 months ago

MichaelVoelkel commented 7 months ago

Being on macOS with Apple Silicon here. (Sonoma)

So I tried using VSC clangd but it cannot find symlinks.

In settings.json I have:

    "clangd.arguments": ["-log=verbose", 
                         "-pretty", 
                         "--background-index", 
                         "--compile-commands-dir=/Users/michael/Private/MyWorkspace/MyProject/build/src/compile_commands.json"],

The compile_commands file is recognized because all my internal symbols work nicely.

Maybe an excerpt from my compile_commands.json file:

{
  "directory": "/Users/michael/Private/MyWorkspace/MyProject/build/src",
  "command": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DADS_IMPORT -DADS_NAMESPACE_ENABLED -DBOOST_ALL_NO_LIB -DBOOST_THREAD_NO_LIB -DNOMINMAX -DPR_EXPORT -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_QMLINTEGRATION_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -D_WIN32_WINNT=0x0501 -Dsrc_EXPORTS -I/Users/michael/Private/MyWorkspace/MyProject/build/src/src_autogen/include -I/Users/michael/Private/MyWorkspace/MyProject/src/../libs/nestedFor -I/Users/michael/Private/MyWorkspace/MyProject/src/../libs/staticSort -I/Users/michael/Private/MyWorkspace/MyProject/src/../libs/rapidxml -I/Users/michael/Private/MyWorkspace/MyProject/build/Release/fcppt/include -I/Users/michael/Private/MyWorkspace/MyProject/build/Release/qxt/include -I/Users/michael/Private/MyWorkspace/MyProject/build/Release/cryptopp/include -I/Users/michael/Private/MyWorkspace/MyProject/build/Release/nats/include -I/Users/michael/Private/MyWorkspace/MyProject/build/Release/sentry/include -I/Users/michael/Private/MyWorkspace/MyProject/src/../libs/json/include -I/Users/michael/Private/MyWorkspace/MyProject/src/../libs/magic_enum/include -I/Users/michael/Private/MyWorkspace/MyProject/src/. -I/Users/michael/Private/MyWorkspace/MyProject/build/Release/QtAdvancedDockingSystem/include -isystem /opt/homebrew/include -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtCore.framework/Headers -iframework /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/mkspecs/macx-clang -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/include -isystem /Users/michael/Private/MyWorkspace/MyProject/build/Release/openssl/include -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtWidgets.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtGui.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtSvg.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtQml.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/include/QtQmlIntegration -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtNetwork.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtQuick.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtQmlModels.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtOpenGL.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtQuickWidgets.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtSvgWidgets.framework/Headers -isystem /Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtConcurrent.framework/Headers  -fprofile-instr-generate -fcoverage-mapping -O3 -DNDEBUG -O3 -g -DNDEBUG -std=gnu++17 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -fPIC -Winvalid-pch -Xarch_arm64 -include/Users/michael/Private/MyWorkspace/MyProject/build/src/CMakeFiles/src.dir/cmake_pch_arm64.hxx -o CMakeFiles/src.dir/version.cpp.o -c /Users/michael/Private/MyWorkspace/MyProject/src/version.cpp",
  "file": "/Users/michael/Private/MyWorkspace/MyProject/src/version.cpp",
  "output": "CMakeFiles/src.dir/version.cpp.o"
},

If I follow through myself, I see that:

/Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtCore.framework/Headers

is a symlink to

Versions/Current/Headers

while Versions/Current is a symlink to A. So in essence (and this works with the "normal" VSC c/c++ intellisense) the whole think goes to:

/Users/michael/Private/MyWorkspace/MyProject/libs/6.4.2/macos/lib/QtCore.framework/Versions/A/Headers

And there I find a file like QAbstractItemModel. However, clangd tells me, it cannot find it.

Verbose logs are enabled, the relevant part is probably this (at least searching for QAbstractItemModel does not reveal anything better):

V[07:29:44.132] >>> {
  "jsonrpc": "2.0",
  "method": "textDocument/publishDiagnostics",
  "params": {
    "diagnostics": [
      {
        "code": "pp_file_not_found",
        "message": "In included file: 'QAbstractItemModel' file not found",
        "range": {
          "end": {
            "character": 31,
            "line": 0
          },
          "start": {
            "character": 9,
            "line": 0
          }
        },
        "relatedInformation": [
          {
            "location": {
              "range": {
                "end": {
                  "character": 29,
                  "line": 3
                },
                "start": {
                  "character": 9,
                  "line": 3
                }
              },
              "uri": "file:///Users/michael/Private/MyWorkspace/MyProject/src/version.cpp"
            },
            "message": "Error occurred here"
          }
        ],
        "severity": 1,
        "source": "clang"
      },

My unqualified assumption is that clangd has problems with this "symlink-complicated" Qt include structure. No clue why but it's definitely annoying. Any idea?

It can probably be rather macos-clangd-related. Then again, I think QtCreator also uses clangd but clearly works. So I'm a bit puzzled now.

MichaelVoelkel commented 7 months ago

Oh damn. compile-commands-dir wants drumrolls a directory and not the filepath. This already solves it. No clue why Intellisense still worked, I thought I had disabled it for the normal c/cpp extension via "C_Cpp.intelliSenseEngine": "disabled",.

Anyways! Sorry for waste of time in case anyone read it already.