diff --git a/.gitignore b/.gitignore index 9290ca1..d14fb8e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,5 @@ vscode/node_modules vscode/out lsp-server/build -lsp-server/test/test_ast/build -lsp-server/test/test_symbol/build -lsp-server/test/test_lsp_any/build +lsp-server/.conan +lsp-server/CMakeUserPresets.json diff --git a/lsp-server/CMakeLists.txt b/lsp-server/CMakeLists.txt index 65d5e11..360b9c7 100644 --- a/lsp-server/CMakeLists.txt +++ b/lsp-server/CMakeLists.txt @@ -1,21 +1,10 @@ cmake_minimum_required(VERSION 4.0) -project(tsl-server) +project(tsl-server LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) -message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") -message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") -message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") - -if(DEFINED CMAKE_TOOLCHAIN_FILE) - message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}") -endif() -if(DEFINED VCPKG_TARGET_TRIPLET) - message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") -endif() - # 设置默认构建类型 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE @@ -25,105 +14,11 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) "MinSizeRel" "RelWithDebInfo") endif() -# MinGW/MSYS2 静态链接 -if(MINGW) - add_link_options(-static -static-libgcc -static-libstdc++) -elseif(UNIX AND NOT APPLE) # Linux 静态链接 - add_link_options(-static-libgcc -static-libstdc++) -endif() - -if(WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a") -else() - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") -endif() - -find_package(glaze CONFIG REQUIRED) -find_package(spdlog CONFIG REQUIRED) -find_package(fmt CONFIG REQUIRED) -find_package(Taskflow REQUIRED) - -if(UNIX AND NOT APPLE) - find_package(Threads REQUIRED) -endif() - -if(DEFINED CMAKE_TOOLCHAIN_FILE) - find_package(unofficial-tree-sitter CONFIG REQUIRED) - set(TREESITTER_TARGET unofficial::tree-sitter::tree-sitter) -else() - # find_package(PkgConfig REQUIRED) pkg_check_modules(TREESITTER tree-sitter) - find_library(TREESITTER_LIBRARY tree-sitter) # use ${TREESITTER_LIBRARY} - set(TREESITTER_TARGET ${TREESITTER_LIBRARY}) -endif() - -if(NOT TARGET spdlog::spdlog_header_only) - message(WARNING "spdlog header-only target not found, using shared library") -endif() -if(NOT TARGET fmt::fmt-header-only) - message(WARNING "fmt header-only target not found, using shared library") -endif() - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) -set(SOURCES - src/main.cpp - src/utils/args_parser.cpp - src/utils/string.cpp - src/core/dispacther.cpp - src/core/server.cpp - src/scheduler/async_executor.cpp - src/language/ast/deserializer.cpp - src/language/ast/detail.cpp - src/language/ast/tree_sitter_utils.cpp - src/language/symbol/builder.cpp - src/language/symbol/location_index.cpp - src/language/symbol/relations.cpp - src/language/symbol/store.cpp - src/language/symbol/scope.cpp - src/language/symbol/table.cpp - src/language/symbol/builder.cpp - src/language/keyword/repo.cpp - src/provider/base/bootstrap.cpp - src/provider/base/interface.cpp - src/provider/initialize/initialize.cpp - src/provider/initialized/initialized.cpp - src/provider/text_document/did_open.cpp - src/provider/text_document/did_change.cpp - src/provider/text_document/did_close.cpp - src/provider/text_document/completion.cpp - # src/provider/text_document/semantic_tokens.cpp - src/provider/shutdown/shutdown.cpp - src/provider/exit/exit.cpp - src/provider/cancel_request/cancel_request.cpp - src/provider/trace/set_trace.cpp - src/provider/completion_item/resolve.cpp - src/service/base/bootstrap.cpp - src/service/utils/text_coordinates.cpp - src/service/detail/document/text_document.cpp - src/service/detail/symbol/conversion.cpp - src/service/detail/symbol/repository/editing.cpp - src/service/detail/symbol/repository/workspace.cpp - src/service/detail/symbol/repository/system.cpp - src/service/document.cpp - src/service/symbol.cpp - src/service/parser.cpp - src/tree-sitter/parser.c - src/tree-sitter/scanner.c) - -add_executable(${PROJECT_NAME} ${SOURCES}) -target_include_directories(${PROJECT_NAME} PRIVATE src) - -target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY - FMT_HEADER_ONLY) - -target_link_libraries( - ${PROJECT_NAME} - PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only - fmt::fmt-header-only ${TREESITTER_TARGET} # 使用变量,避免条件判断 - $<$:Threads::Threads> # 使用生成器表达式 -) - -if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - target_compile_options( - ${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$:-g -O0> - $<$:-O3>) +option(BUILD_TESTS "Build tests" ON) + +add_subdirectory(src) + +if(BUILD_TESTS) + enable_testing() + add_subdirectory(test) endif() diff --git a/lsp-server/conan/profiles/linux-x86_64-gcc-15 b/lsp-server/conan/profiles/linux-x86_64-gcc-15 new file mode 100644 index 0000000..475a297 --- /dev/null +++ b/lsp-server/conan/profiles/linux-x86_64-gcc-15 @@ -0,0 +1,14 @@ +[settings] +os=Linux +arch=x86_64 +compiler=gcc +compiler.version=15 +compiler.libcxx=libstdc++11 +compiler.cppstd=23 +build_type=Release + +[conf] +tools.build:compiler_executables={"c": "gcc", "cpp": "g++"} +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder=. +tools.cmake.cmake_layout:build_folder_vars=[] diff --git a/lsp-server/conan/profiles/windows-x86_64-gcc-15-cross b/lsp-server/conan/profiles/windows-x86_64-gcc-15-cross new file mode 100644 index 0000000..c3a6308 --- /dev/null +++ b/lsp-server/conan/profiles/windows-x86_64-gcc-15-cross @@ -0,0 +1,25 @@ +# Windows cross (MinGW GCC 14) from Linux host + +[settings] +os=Windows +arch=x86_64 +compiler=gcc +compiler.version=14 +compiler.libcxx=libstdc++11 +compiler.threads=posix +compiler.exception=seh +compiler.cppstd=23 +build_type=Release + +[conf] +tools.build:compiler_executables={"c": "x86_64-w64-mingw32-gcc", "cpp": "x86_64-w64-mingw32-g++"} +tools.gnu:host_triplet=x86_64-w64-mingw32 +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmaketoolchain:system_name=Windows +tools.cmake.cmaketoolchain:system_processor=x86_64 +tools.cmake.cmake_layout:build_folder=. +tools.cmake.cmake_layout:build_folder_vars=[] +tools.cmake.cmaketoolchain:system_version=11 + +[buildenv] +RC=x86_64-w64-mingw32-windres diff --git a/lsp-server/conan/profiles/windows-x86_64-gcc-15-msys2 b/lsp-server/conan/profiles/windows-x86_64-gcc-15-msys2 new file mode 100644 index 0000000..4d53880 --- /dev/null +++ b/lsp-server/conan/profiles/windows-x86_64-gcc-15-msys2 @@ -0,0 +1,28 @@ +# Windows MSYS2 UCRT, GCC 14 (adjust paths if msys2 is elsewhere) + +[settings] +os=Windows +os.subsystem=msys2 +arch=x86_64 +compiler=gcc +compiler.version=14 +compiler.libcxx=libstdc++11 +compiler.threads=posix +compiler.exception=seh +compiler.cppstd=23 +build_type=Release + +[conf] +tools.build:compiler_executables={"c": "C:/Programs/msys2/ucrt64/bin/gcc.exe", "cpp": "C:/Programs/msys2/ucrt64/bin/g++.exe"} +tools.gnu:host_triplet=x86_64-w64-mingw32 +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmaketoolchain:system_name=Windows +tools.cmake.cmaketoolchain:system_processor=x86_64 +tools.cmake.cmake_layout:build_folder=. +tools.cmake.cmake_layout:build_folder_vars=[] +tools.cmake.cmaketoolchain:system_version=11 + +[buildenv] +MSYSTEM=UCRT64 +CHERE_INVOKING=1 +PKG_CONFIG_PATH=C:/Programs/msys2/ucrt64/lib/pkgconfig diff --git a/lsp-server/conanfile.txt b/lsp-server/conanfile.txt new file mode 100644 index 0000000..0569dfb --- /dev/null +++ b/lsp-server/conanfile.txt @@ -0,0 +1,37 @@ +[requires] +glaze/6.0.1 +spdlog/1.16.0 +fmt/12.0.0 +taskflow/3.10.0 +tree-sitter/0.25.9 + +[generators] +CMakeDeps +CMakeToolchain + +[options] +spdlog/*:header_only=True +fmt/*:header_only=True + +[layout] +cmake_layout + +# Quick build (only test_ast): +# CONAN_HOME=/tmp/conan-home conan install . \ +# -pr:h conan/profiles/linux-x86_64-gcc-15 \ +# -pr:b conan/profiles/linux-x86_64-gcc-15 \ +# -of build/arch-server --build=missing +# cmake -S . -B build/arch-server \ +# -DCMAKE_TOOLCHAIN_FILE=$PWD/build/arch-server/Release/generators/conan_toolchain.cmake \ +# -DBUILD_TESTS=ON +# cmake --build build/arch-server --target test_ast + +# Cross build to Windows (MinGW from Linux): +# CONAN_HOME=/tmp/conan-home conan install . \ +# -pr:h conan/profiles/windows-x86_64-gcc-15-cross \ +# -pr:b conan/profiles/linux-x86_64-gcc-15 \ +# -of build/win-cross --build=missing +# cmake -S . -B build/win-cross \ +# -DCMAKE_TOOLCHAIN_FILE=$PWD/build/win-cross/Release/generators/conan_toolchain.cmake \ +# -DBUILD_TESTS=ON +# cmake --build build/win-cross --target test_ast diff --git a/lsp-server/src/CMakeLists.txt b/lsp-server/src/CMakeLists.txt new file mode 100644 index 0000000..6a45ff9 --- /dev/null +++ b/lsp-server/src/CMakeLists.txt @@ -0,0 +1,103 @@ +message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") + +if(DEFINED CMAKE_TOOLCHAIN_FILE) + message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}") +endif() + +# MinGW/MSYS2 静态链接 +if(MINGW) + add_link_options(-static -static-libgcc -static-libstdc++) +elseif(UNIX AND NOT APPLE) # Linux 静态链接 + add_link_options(-static-libgcc -static-libstdc++) +endif() + +if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a") +else() + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") +endif() + +find_package(glaze CONFIG REQUIRED) +find_package(spdlog CONFIG REQUIRED) +find_package(fmt CONFIG REQUIRED) +find_package(Taskflow CONFIG REQUIRED) +find_package(tree-sitter CONFIG REQUIRED) + +if(UNIX AND NOT APPLE) + find_package(Threads REQUIRED) +endif() + +if(NOT TARGET spdlog::spdlog_header_only) + message(WARNING "spdlog header-only target not found, using shared library") +endif() +if(NOT TARGET fmt::fmt-header-only) + message(WARNING "fmt header-only target not found, using shared library") +endif() + +set(SOURCES + main.cpp + utils/args_parser.cpp + utils/string.cpp + core/dispacther.cpp + core/server.cpp + scheduler/async_executor.cpp + language/ast/deserializer.cpp + language/ast/detail.cpp + language/ast/tree_sitter_utils.cpp + language/symbol/builder.cpp + language/symbol/index/location.cpp + language/symbol/index/scope.cpp + language/symbol/graph/call.cpp + language/symbol/graph/inheritance.cpp + language/symbol/graph/reference.cpp + language/symbol/store.cpp + language/symbol/table.cpp + language/keyword/repo.cpp + provider/base/bootstrap.cpp + provider/base/interface.cpp + provider/initialize/initialize.cpp + provider/initialized/initialized.cpp + provider/text_document/did_open.cpp + provider/text_document/did_change.cpp + provider/text_document/did_close.cpp + provider/text_document/completion.cpp + # provider/text_document/semantic_tokens.cpp + provider/shutdown/shutdown.cpp + provider/exit/exit.cpp + provider/cancel_request/cancel_request.cpp + provider/trace/set_trace.cpp + provider/completion_item/resolve.cpp + service/base/bootstrap.cpp + service/utils/text_coordinates.cpp + service/detail/document/text_document.cpp + service/detail/symbol/conversion.cpp + service/detail/symbol/utils.cpp + service/detail/symbol/repository/editing.cpp + service/detail/symbol/repository/workspace.cpp + service/detail/symbol/repository/system.cpp + service/document.cpp + service/symbol.cpp + service/parser.cpp + tree-sitter/parser.c + tree-sitter/scanner.c) + +add_executable(${PROJECT_NAME} ${SOURCES}) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY + FMT_HEADER_ONLY) + +target_link_libraries( + ${PROJECT_NAME} + PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only + fmt::fmt-header-only tree-sitter::tree-sitter + $<$:Threads::Threads> # 使用生成器表达式 +) + +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options( + ${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$:-g -O0> + $<$:-O3>) +endif() diff --git a/lsp-server/test/CMakeLists.txt b/lsp-server/test/CMakeLists.txt new file mode 100644 index 0000000..f0f7882 --- /dev/null +++ b/lsp-server/test/CMakeLists.txt @@ -0,0 +1,24 @@ +# MinGW/MSYS2 静态链接 +if(MINGW) + add_link_options(-static -static-libgcc -static-libstdc++) +elseif(UNIX AND NOT APPLE) # Linux 静态链接 + add_link_options(-static-libgcc -static-libstdc++) +endif() + +if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a") +else() + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") +endif() + +if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test_ast/CMakeLists.txt) + add_subdirectory(test_ast) +endif() + +if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test_lsp_any/CMakeLists.txt) + add_subdirectory(test_lsp_any) +endif() + +if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test_symbol/CMakeLists.txt) + add_subdirectory(test_symbol) +endif() diff --git a/lsp-server/test/test_ast/CMakeLists.txt b/lsp-server/test/test_ast/CMakeLists.txt index 52be0ca..49a2144 100644 --- a/lsp-server/test/test_ast/CMakeLists.txt +++ b/lsp-server/test/test_ast/CMakeLists.txt @@ -1,73 +1,23 @@ cmake_minimum_required(VERSION 4.0) -project(test_ast) +project(test_ast LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) -message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") -message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") -message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") - -if (DEFINED CMAKE_TOOLCHAIN_FILE) - message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}") -endif() -if (DEFINED VCPKG_TARGET_TRIPLET) - message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") -endif() - -# 设置默认构建类型 -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE - "Release" - CACHE STRING "Build type" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" - "MinSizeRel" "RelWithDebInfo") -endif() - -# MinGW/MSYS2 静态链接 -if(MINGW) - add_link_options(-static -static-libgcc -static-libstdc++) -elseif(UNIX AND NOT APPLE) # Linux 静态链接 - add_link_options(-static-libgcc -static-libstdc++) -endif() - -if(WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a") -else() - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") -endif() - find_package(glaze CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED) find_package(fmt CONFIG REQUIRED) -find_package(Taskflow REQUIRED) +find_package(Taskflow CONFIG REQUIRED) +find_package(tree-sitter CONFIG REQUIRED) if(UNIX AND NOT APPLE) find_package(Threads REQUIRED) endif() -if(DEFINED CMAKE_TOOLCHAIN_FILE) - find_package(unofficial-tree-sitter CONFIG REQUIRED) - set(TREESITTER_TARGET unofficial::tree-sitter::tree-sitter) -else() - # find_package(PkgConfig REQUIRED) - # pkg_check_modules(TREESITTER tree-sitter) - find_library(TREESITTER_LIBRARY tree-sitter) # use ${TREESITTER_LIBRARY} - set(TREESITTER_TARGET ${TREESITTER_LIBRARY}) -endif() - -if(NOT TARGET spdlog::spdlog_header_only) - message(WARNING "spdlog header-only target not found, using shared library") -endif() -if(NOT TARGET fmt::fmt-header-only) - message(WARNING "fmt header-only target not found, using shared library") -endif() - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) set(SOURCES - ./test.cpp - ./debug_printer.cpp + test.cpp + debug_printer.cpp ../../src/language/ast/deserializer.cpp ../../src/language/ast/detail.cpp ../../src/language/ast/tree_sitter_utils.cpp @@ -76,25 +26,19 @@ set(SOURCES ../../src/tree-sitter/parser.c) add_executable(${PROJECT_NAME} ${SOURCES}) -target_include_directories(${PROJECT_NAME} PRIVATE src) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY FMT_HEADER_ONLY) -target_link_libraries(${PROJECT_NAME} PRIVATE - glaze::glaze - Taskflow::Taskflow - spdlog::spdlog_header_only - fmt::fmt-header-only - ${TREESITTER_TARGET} # 使用变量,避免条件判断 - $<$:Threads::Threads> # 使用生成器表达式 -) +target_link_libraries( + ${PROJECT_NAME} + PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only + fmt::fmt-header-only tree-sitter::tree-sitter + $<$:Threads::Threads>) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - target_compile_options(${PROJECT_NAME} PRIVATE - -Wall -Wextra -Wpedantic - $<$:-g -O0> - $<$:-O3> - ) + target_compile_options( + ${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$:-g -O0> + $<$:-O3>) endif() - diff --git a/lsp-server/test/test_lsp_any/CMakeLists.txt b/lsp-server/test/test_lsp_any/CMakeLists.txt index 19c4e46..82301a0 100644 --- a/lsp-server/test/test_lsp_any/CMakeLists.txt +++ b/lsp-server/test/test_lsp_any/CMakeLists.txt @@ -1,72 +1,32 @@ cmake_minimum_required(VERSION 4.0) -project(test_lsp_any) +project(test_lsp_any LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) -message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") -message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") -message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") - -if (DEFINED CMAKE_TOOLCHAIN_FILE) - message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}") -endif() -if (DEFINED VCPKG_TARGET_TRIPLET) - message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") -endif() - -# 设置默认构建类型 -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE - "Release" - CACHE STRING "Build type" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" - "MinSizeRel" "RelWithDebInfo") -endif() - -# MinGW/MSYS2 静态链接 -if(MINGW) - add_link_options(-static -static-libgcc -static-libstdc++) -elseif(UNIX AND NOT APPLE) # Linux 静态链接 - add_link_options(-static-libgcc -static-libstdc++) -endif() - -if(WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a") -else() - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") -endif() - find_package(glaze CONFIG REQUIRED) if(UNIX AND NOT APPLE) find_package(Threads REQUIRED) endif() -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) set(SOURCES - ./common_test.cpp - ./facade_test.cpp - ./lsp_any_test.cpp - ./test_framework.cpp - ./test_main.cpp - ./transformer_test.cpp -) + common_test.cpp + facade_test.cpp + lsp_any_test.cpp + test_framework.cpp + test_main.cpp + transformer_test.cpp) add_executable(${PROJECT_NAME} ${SOURCES}) -target_include_directories(${PROJECT_NAME} PRIVATE src) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(${PROJECT_NAME} PRIVATE - glaze::glaze - $<$:Threads::Threads> # 使用生成器表达式 -) +target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze + $<$:Threads::Threads>) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - target_compile_options(${PROJECT_NAME} PRIVATE - -Wall -Wextra -Wpedantic - $<$:-g -O0> - $<$:-O3> - ) + target_compile_options( + ${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$:-g -O0> + $<$:-O3>) endif() - diff --git a/lsp-server/test/test_symbol/CMakeLists.txt b/lsp-server/test/test_symbol/CMakeLists.txt index 284d064..eedef97 100644 --- a/lsp-server/test/test_symbol/CMakeLists.txt +++ b/lsp-server/test/test_symbol/CMakeLists.txt @@ -1,100 +1,52 @@ cmake_minimum_required(VERSION 4.0) -project(test_symbol) +project(test_symbol LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) -message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") -message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") -message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") - -if (DEFINED CMAKE_TOOLCHAIN_FILE) - message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}") -endif() -if (DEFINED VCPKG_TARGET_TRIPLET) - message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") -endif() - -# 设置默认构建类型 -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE - "Release" - CACHE STRING "Build type" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" - "MinSizeRel" "RelWithDebInfo") -endif() - -# MinGW/MSYS2 静态链接 -if(MINGW) - add_link_options(-static -static-libgcc -static-libstdc++) -elseif(UNIX AND NOT APPLE) # Linux 静态链接 - add_link_options(-static-libgcc -static-libstdc++) -endif() - -if(WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a") -else() - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") -endif() - find_package(glaze CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED) find_package(fmt CONFIG REQUIRED) -find_package(Taskflow REQUIRED) +find_package(Taskflow CONFIG REQUIRED) +find_package(tree-sitter CONFIG REQUIRED) if(UNIX AND NOT APPLE) find_package(Threads REQUIRED) endif() -if(DEFINED CMAKE_TOOLCHAIN_FILE) - find_package(unofficial-tree-sitter CONFIG REQUIRED) - set(TREESITTER_TARGET unofficial::tree-sitter::tree-sitter) -else() - # find_package(PkgConfig REQUIRED) - # pkg_check_modules(TREESITTER tree-sitter) - find_library(TREESITTER_LIBRARY tree-sitter) # use ${TREESITTER_LIBRARY} - set(TREESITTER_TARGET ${TREESITTER_LIBRARY}) -endif() - -if(NOT TARGET spdlog::spdlog_header_only) - message(WARNING "spdlog header-only target not found, using shared library") -endif() -if(NOT TARGET fmt::fmt-header-only) - message(WARNING "fmt header-only target not found, using shared library") -endif() - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) set(SOURCES - ./test.cpp - ./debug_printer.cpp + test.cpp + debug_printer.cpp ../../src/utils/string.cpp ../../src/language/ast/deserializer.cpp ../../src/language/ast/detail.cpp ../../src/language/ast/tree_sitter_utils.cpp ../../src/language/symbol/builder.cpp + ../../src/language/symbol/store.cpp + ../../src/language/symbol/table.cpp + ../../src/language/symbol/index/location.cpp + ../../src/language/symbol/index/scope.cpp + ../../src/language/symbol/graph/call.cpp + ../../src/language/symbol/graph/inheritance.cpp + ../../src/language/symbol/graph/reference.cpp ../../src/tree-sitter/scanner.c ../../src/tree-sitter/parser.c) add_executable(${PROJECT_NAME} ${SOURCES}) -target_include_directories(${PROJECT_NAME} PRIVATE src) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY FMT_HEADER_ONLY) -target_link_libraries(${PROJECT_NAME} PRIVATE - glaze::glaze - Taskflow::Taskflow - spdlog::spdlog_header_only - fmt::fmt-header-only - ${TREESITTER_TARGET} # 使用变量,避免条件判断 - $<$:Threads::Threads> # 使用生成器表达式 -) +target_link_libraries( + ${PROJECT_NAME} + PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only + fmt::fmt-header-only tree-sitter::tree-sitter + $<$:Threads::Threads>) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - target_compile_options(${PROJECT_NAME} PRIVATE - -Wall -Wextra -Wpedantic - $<$:-g -O0> - $<$:-O3> - ) + target_compile_options( + ${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$:-g -O0> + $<$:-O3>) endif()