Files
clice/docs/design/architecture.md
2024-10-02 17:01:26 +08:00

41 lines
1.1 KiB
Markdown

# Design of clice
## Server
clice is a language server, which is also a kind of server. It uses [libuv](https://github.com/libuv/libuv) as the event library and follows the common event-driven model. The main thread handles requests and distributes tasks, while the thread pool executes the actual tasks. Related code is located in the `Server` directory. It generally is responsible for the following tasks:
- communicate with the client
- initialize the server
- distrubute tasks to the thread pool
- manage all opened files
## Protocol
describe the LSP [specification](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/) with C++ struct definition.
## AST
The main focus is to encapsulate some compiler interfaces of Clang.
- build preamble
- build AST
- capture macros
- capture diagnostics
- resolve template
- implement `SelectionTree`
TODO: add more details
## Index
mainly about how to build index and how to use it.
TODO: add more details
## Feature
specific LSP feature implementations.
## Support
some useful utilities.