blob: 8273dc263147cbc2b2fefe41d4a5e1828c500852 [file] [log] [blame]
# This package contains the basic language server protocol [1] implementation
# needed in language specific parts to provide LSP services.
# LSP is using JSON-PRC [2] for the RPC protocol, the transport layer chunks
# messages with header+body blocks, similar to HTTP.
#
# [1]: https://microsoft.github.io/language-server-protocol/specification
# [2]: https://www.jsonrpc.org/specification
load("//bazel:sh_test_with_runfiles_lib.bzl", "sh_test_with_runfiles_lib")
package(
default_applicable_licenses = ["//:license"],
default_visibility = [
"//verilog/tools/ls:__subpackages__",
],
features = ["layering_check"],
)
cc_library(
name = "message-stream-splitter",
srcs = ["message-stream-splitter.cc"],
hdrs = ["message-stream-splitter.h"],
deps = [
"//common/util:status-macros",
"@com_google_absl//absl/status",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:string_view",
],
)
cc_test(
name = "message-stream-splitter_test",
srcs = ["message-stream-splitter_test.cc"],
deps = [
":message-stream-splitter",
"@com_google_absl//absl/status",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:string_view",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "json-rpc-dispatcher",
srcs = ["json-rpc-dispatcher.cc"],
hdrs = ["json-rpc-dispatcher.h"],
copts = select({
"@platforms//os:windows": [],
"//conditions:default": ["-fexceptions"],
}),
features = ["-use_header_modules"], # precompiled headers incompatible with -fexceptions.
deps = [
"//common/util:logging",
"@com_google_absl//absl/strings:string_view",
"@jsonhpp//:json",
],
)
cc_test(
name = "json-rpc-dispatcher_test",
srcs = ["json-rpc-dispatcher_test.cc"],
copts = select({
"@platforms//os:windows": [],
"//conditions:default": ["-fexceptions"],
}),
features = ["-use_header_modules"], # precompiled headers incompatible with -fexceptions.
deps = [
":json-rpc-dispatcher",
"@com_google_absl//absl/strings:string_view",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
"@jsonhpp//:json",
],
)
genrule(
name = "lsp-protocol-gen",
srcs = ["lsp-protocol.yaml"],
outs = ["lsp-protocol.h"],
cmd = "$(location :jcxxgen) --class_namespace verible::lsp --output $@ $<",
tools = [":jcxxgen"],
)
cc_library(
name = "lsp-protocol",
hdrs = ["lsp-protocol.h"],
deps = ["@jsonhpp//:json"],
)
cc_library(
name = "lsp-protocol-enums",
hdrs = ["lsp-protocol-enums.h"],
)
cc_library(
name = "lsp-protocol-operators",
hdrs = ["lsp-protocol-operators.h"],
deps = [":lsp-protocol"],
)
cc_test(
name = "lsp-protocol-operators_test",
srcs = ["lsp-protocol-operators_test.cc"],
deps = [
":lsp-protocol",
":lsp-protocol-operators",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "lsp-text-buffer",
srcs = ["lsp-text-buffer.cc"],
hdrs = ["lsp-text-buffer.h"],
deps = [
":json-rpc-dispatcher",
":lsp-protocol",
"//common/strings:utf8",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:string_view",
],
)
cc_test(
name = "lsp-text-buffer_test",
srcs = ["lsp-text-buffer_test.cc"],
deps = [
":json-rpc-dispatcher",
":lsp-protocol",
":lsp-text-buffer",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:string_view",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "lsp-file-utils",
srcs = ["lsp-file-utils.cc"],
hdrs = ["lsp-file-utils.h"],
deps = [
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:string_view",
],
)
cc_test(
name = "lsp-file-utils_test",
srcs = ["lsp-file-utils_test.cc"],
deps = [
":lsp-file-utils",
"@com_google_absl//absl/strings",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_binary(
name = "json-rpc-expect",
srcs = ["json-rpc-expect.cc"],
deps = [
":message-stream-splitter",
"@com_google_absl//absl/status",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:string_view",
"@jsonhpp//:json",
],
)
cc_binary(
name = "dummy-ls",
srcs = ["dummy-ls.cc"],
deps = [
":json-rpc-dispatcher",
":lsp-protocol",
":lsp-text-buffer",
":message-stream-splitter",
"@com_google_absl//absl/status",
"@com_google_absl//absl/strings:string_view",
"@jsonhpp//:json",
],
)
sh_test_with_runfiles_lib(
name = "dummy-ls_test",
size = "small",
srcs = ["dummy-ls_test.sh"],
args = [
"$(location :dummy-ls)",
"$(location :json-rpc-expect)",
],
data = [
":dummy-ls",
":json-rpc-expect",
],
deps = [],
)
cc_binary(
name = "jcxxgen",
srcs = ["jcxxgen.cc"],
visibility = ["//visibility:private"],
deps = [
"//common/util:init-command-line",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/flags:flag",
"@com_google_absl//absl/strings",
"@com_googlesource_code_re2//:re2",
],
)
genrule(
name = "jcxxgen-testfile-gen",
srcs = ["jcxxgen-testfile.yaml"],
outs = ["jcxxgen-testfile.h"],
cmd = "$(location :jcxxgen) --class_namespace verible::test --output $@ $<",
tools = [":jcxxgen"],
)
cc_library(
name = "jcxxgen-testfile",
hdrs = ["jcxxgen-testfile.h"],
deps = ["@jsonhpp//:json"],
)
cc_test(
name = "jcxxgen_test",
srcs = ["jcxxgen_test.cc"],
copts = select({
"@platforms//os:windows": [],
"//conditions:default": ["-fexceptions"],
}),
features = ["-use_header_modules"], # precompiled headers incompatible with -fexceptions.
deps = [
":jcxxgen-testfile",
"@com_google_absl//absl/strings",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
"@jsonhpp//:json",
],
)