Skip to content

Commit ee62366

Browse files
committed
feat: 使用 angel-lsp (WIP);
1 parent b63a176 commit ee62366

38 files changed

Lines changed: 3191 additions & 3031 deletions

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@
2020
[submodule "3rdparty/antlr4-cpp"]
2121
path = 3rdparty/antlr4-cpp
2222
url = git@github.com:Wing-summer/antlr4-cpp.git
23+
[submodule "3rdparty/angel-lsp"]
24+
path = 3rdparty/angel-lsp
25+
url = git@github.com:Wing-summer/angel-lsp.git

3rdparty/angel-lsp

Submodule angel-lsp added at fc358e1

CMakeLists.txt

Lines changed: 139 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ install(CODE "set(CMAKE_INSTALL_LOCAL_ONLY TRUE)" ALL_COMPONENTS)
2323
option(WINGHEX_USE_FRAMELESS ON)
2424
option(BUILD_TEST_PLUGIN OFF)
2525
option(BUILD_SHARED_MEM_EXT OFF)
26+
option(ANGEL_LSP ON)
2627

2728
add_definitions(-DAS_NO_THREADS)
2829
add_definitions(-DWING_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}")
@@ -228,7 +229,9 @@ set(CONTROL_SRC
228229
src/control/codeeditcontrolwidget.h
229230
src/control/codeeditcontrolwidget.cpp
230231
src/control/scrollablelabel.h
231-
src/control/scrollablelabel.cpp)
232+
src/control/scrollablelabel.cpp
233+
src/control/wingcodeeditlsp.h
234+
src/control/wingcodeeditlsp.cpp)
232235

233236
set(CLASS_SRC
234237
src/class/logger.cpp
@@ -263,16 +266,12 @@ set(CLASS_SRC
263266
src/class/appmanager.h
264267
src/class/appmanager.cpp
265268
src/class/angelscripthelper.h
266-
src/class/asdatabase.cpp
267-
src/class/asdatabase.h
268269
src/class/qascodeparser.h
269270
src/class/qascodeparser.cpp
270271
src/class/ascompletion.cpp
271272
src/class/ascompletion.h
272273
src/class/asbuilder.h
273274
src/class/asbuilder.cpp
274-
src/class/clangformatmanager.h
275-
src/class/clangformatmanager.cpp
276275
src/class/aspreprocesser.h
277276
src/class/aspreprocesser.cpp
278277
src/class/layoutmanager.h
@@ -310,7 +309,10 @@ set(CLASS_SRC
310309
src/class/editorviewcontext.h
311310
src/class/editorviewcontext.cpp
312311
src/class/consolehighlighanim.h
313-
src/class/consolehighlighanim.cpp)
312+
src/class/consolehighlighanim.cpp
313+
src/class/angellsp.h
314+
src/class/angellsp.cpp
315+
src/class/lsp.h)
314316

315317
set(INTERNAL_PLG_SRC
316318
src/class/wingangelapi.h src/class/wingangelapi.cpp
@@ -363,9 +365,6 @@ set(SETTING_SRC
363365
src/settings/othersettingsdialog.h
364366
src/settings/othersettingsdialog.cpp
365367
src/settings/othersettingsdialog.ui
366-
src/settings/clangformatsetdialog.h
367-
src/settings/clangformatsetdialog.cpp
368-
src/settings/clangformatsetdialog.ui
369368
src/settings/qeditconfig.h
370369
src/settings/qeditconfig.cpp
371370
src/settings/qeditconfig.ui)
@@ -463,6 +462,7 @@ set(PROJECT_SOURCES
463462
src/utilities.h
464463
src/dbghelper.h
465464
src/define.h
465+
src/predefgen.h
466466
${QCONSOLEWIDGET_SRC}
467467
${WIDGET_FRAME_SRC}
468468
${RIBBON_SRC}
@@ -492,8 +492,12 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
492492
qt_add_executable(WingHexExplorer2 MANUAL_FINALIZATION
493493
${PROJECT_SOURCES} ${app_icon_resource_windows})
494494
else()
495+
find_package(Qt6 REQUIRED COMPONENTS Widgets)
496+
495497
qt_add_executable(WingHexExplorer2 MANUAL_FINALIZATION
496498
${PROJECT_SOURCES})
499+
500+
target_link_libraries(WingHexExplorer2 PRIVATE Qt6::Widgets)
497501
endif()
498502
endif()
499503

@@ -558,6 +562,8 @@ if(QT_VERSION_MAJOR EQUAL 6)
558562
qt_finalize_executable(WingHexExplorer2)
559563
endif()
560564

565+
add_dependencies(WingHexExplorer2 post_build_tasks build-time-make-directory)
566+
561567
if(${QT_VERSION_MAJOR} EQUAL 6)
562568
if(Qt6Widgets_VERSION VERSION_GREATER_EQUAL 6.5.0)
563569
install(
@@ -604,3 +610,127 @@ target_link_options(
604610
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:Clang>>:-Wl,--gc-sections>
605611
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:MSVC>>:/OPT:REF
606612
/OPT:ICF>)
613+
614+
if(ANGEL_LSP)
615+
set(NODE_SUBDIR "${CMAKE_SOURCE_DIR}/3rdparty/angel-lsp/server")
616+
set(BUILD_BIN_DIR "${CMAKE_BINARY_DIR}/lsp")
617+
set(BUILD_BIN_BUILD_DIR "${CMAKE_BINARY_DIR}/lsp-build")
618+
619+
if(WIN32)
620+
set(OUT_NAME "angelscript-ls.exe")
621+
else()
622+
set(OUT_NAME "angelscript-ls")
623+
endif()
624+
625+
set(SRC_JS "${NODE_SUBDIR}/src/server.ts")
626+
set(DIST_JS "${BUILD_BIN_BUILD_DIR}/dist/server.ts")
627+
set(OUT_BIN "${BUILD_BIN_DIR}/${OUT_NAME}")
628+
629+
find_program(NODE_EXE NAMES node)
630+
find_program(NPM_EXE NAMES npm)
631+
find_program(NPX_EXE NAMES npx)
632+
find_program(PKG_EXE NAMES pkg)
633+
634+
if(NOT NODE_EXE)
635+
message(FATAL_ERROR "Node.js not found. Install Node >= 18.")
636+
endif()
637+
if(NOT NPM_EXE)
638+
message(FATAL_ERROR "npm not found. Install npm.")
639+
endif()
640+
641+
message(STATUS "Found node: ${NODE_EXE}")
642+
message(STATUS "Found npm: ${NPM_EXE}")
643+
if(PKG_EXE)
644+
message(STATUS "Found global pkg: ${PKG_EXE}")
645+
elseif(NPX_EXE)
646+
message(
647+
STATUS "Found npx: ${NPX_EXE} (will use npx pkg if pkg not global)")
648+
else()
649+
message(
650+
STATUS
651+
"No global pkg or npx found; will call 'npm exec pkg' as fallback"
652+
)
653+
endif()
654+
655+
if(WIN32)
656+
set(PKG_TARGET "node18-win-x64")
657+
elseif(APPLE)
658+
set(PKG_TARGET "node18-macos-x64")
659+
else()
660+
set(PKG_TARGET "node18-linux-x64")
661+
endif()
662+
663+
if(NPX_EXE)
664+
set(ESBUILD_CMD
665+
${NPX_EXE}
666+
esbuild
667+
"${SRC_JS}"
668+
--bundle
669+
--platform=node
670+
--target=node18
671+
"--outfile=${BUILD_BIN_BUILD_DIR}/dist/server.ts"
672+
--minify)
673+
else()
674+
set(ESBUILD_CMD
675+
${NPM_EXE}
676+
exec
677+
--yes
678+
esbuild
679+
--
680+
"${SRC_JS}"
681+
--bundle
682+
--platform=node
683+
--target=node18
684+
"--outfile=${BUILD_BIN_BUILD_DIR}/dist/server.ts"
685+
--minify)
686+
endif()
687+
688+
if(PKG_EXE)
689+
set(PKG_CMD ${PKG_EXE} "${DIST_JS}" --targets ${PKG_TARGET} --output
690+
"${OUT_BIN}")
691+
elseif(NPX_EXE)
692+
set(PKG_CMD
693+
${NPX_EXE}
694+
pkg
695+
"${DIST_JS}"
696+
--targets
697+
${PKG_TARGET}
698+
--output
699+
"${OUT_BIN}")
700+
else()
701+
set(PKG_CMD
702+
${NPM_EXE}
703+
exec
704+
--yes
705+
pkg
706+
--
707+
"${DIST_JS}"
708+
--targets
709+
${PKG_TARGET}
710+
--output
711+
"${OUT_BIN}")
712+
endif()
713+
714+
add_custom_command(
715+
OUTPUT ${DIST_JS}
716+
WORKING_DIRECTORY ${NODE_SUBDIR}
717+
COMMAND ${CMAKE_COMMAND} -E echo "[1] npm ci (local deps)"
718+
COMMAND ${NPM_EXE} ci --silent
719+
COMMAND ${CMAKE_COMMAND} -E echo "[2] building with esbuild"
720+
COMMAND ${ESBUILD_CMD}
721+
COMMENT "Building JS bundle with esbuild -> ${DIST_JS}"
722+
VERBATIM)
723+
724+
add_custom_command(
725+
OUTPUT ${OUT_BIN}
726+
DEPENDS ${DIST_JS}
727+
WORKING_DIRECTORY ${NODE_SUBDIR}
728+
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_BIN_DIR}
729+
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_BIN_BUILD_DIR}
730+
COMMAND ${CMAKE_COMMAND} -E echo "[3] packaging with pkg/npm exec/npx"
731+
COMMAND ${PKG_CMD}
732+
COMMENT "Packaging with pkg"
733+
VERBATIM)
734+
add_custom_target(build_angel_lsp ALL DEPENDS ${OUT_BIN})
735+
add_dependencies(WingHexExplorer2 build_angel_lsp)
736+
endif()

0 commit comments

Comments
 (0)