8#include "../c_libs/memory/memory.h"
9#include "../lexer/lexer.h"
10#include "../parser/parser.h"
11#include "../typechecker/type.h"
266#define MODULE_AST_CACHE_MAX 128
303 const char *content,
int version);
305 const char *content,
int version);
342 size_t *completion_count,
347 size_t *signature_count,
353 size_t *highlight_count,
380size_t json_escape(
char *dst,
size_t dst_size,
const char *src);
382 size_t diag_count,
char *output,
385 char *output,
size_t output_size);
389 char *output,
size_t output_size);
391 size_t count,
char *output,
LSPCompletionItem * lsp_completion(LSPDocument *doc, LSPPosition position, size_t *completion_count, ArenaAllocator *arena)
Definition lsp_features.c:543
void serialize_completion_items(LSPCompletionItem *items, size_t count, char *output, size_t output_size)
Definition lsp_json.c:388
const char * lsp_rename(LSPDocument *doc, LSPPosition position, const char *new_name, ArenaAllocator *arena)
Definition lsp_features.c:1109
LSPDiagnosticSeverity
Definition lsp.h:66
@ LSP_DIAGNOSTIC_HINT
Definition lsp.h:70
@ LSP_DIAGNOSTIC_WARNING
Definition lsp.h:68
@ LSP_DIAGNOSTIC_ERROR
Definition lsp.h:67
@ LSP_DIAGNOSTIC_INFORMATION
Definition lsp.h:69
void lsp_ast_cache_init(LSPServer *server)
Definition lsp_module.c:492
void lsp_check_pending_analysis(LSPServer *server)
Definition lsp_message.c:52
bool lsp_document_analyze(LSPDocument *doc, LSPServer *server, BuildConfig *config)
Definition lsp_document.c:182
void lsp_send_error(int id, int code, const char *message)
Definition lsp_json.c:308
void serialize_code_actions(LSPCodeAction *actions, size_t count, char *output, size_t output_size)
Definition lsp_json.c:472
LSPDocument * lsp_document_find(LSPServer *server, const char *uri)
Definition lsp_document.c:87
LSPCompletionItem * lsp_completion_resolve(LSPCompletionItem *item, ArenaAllocator *arena)
Definition lsp_features.c:861
void lsp_send_request(const char *method, const char *params)
Definition lsp_json.c:275
const char * lsp_hover(LSPDocument *doc, LSPPosition position, ArenaAllocator *arena)
Definition lsp_features.c:216
void lsp_send_response(int id, const char *result)
Definition lsp_json.c:256
LSPDocument * lsp_document_open(LSPServer *server, const char *uri, const char *content, int version)
Definition lsp_document.c:4
void serialize_diagnostics_to_json(const char *uri, LSPDiagnostic *diagnostics, size_t diag_count, char *output, size_t output_size)
Definition lsp_json.c:357
const char * lsp_path_to_uri(const char *path, ArenaAllocator *arena)
Definition lsp_server.c:136
AstNode * parse_imported_module_ast(LSPServer *server, const char *module_uri, BuildConfig *config, ArenaAllocator *arena)
Definition lsp_module.c:501
LSPDocumentHighlightKind
Definition lsp.h:156
@ LSP_HIGHLIGHT_WRITE
Definition lsp.h:159
@ LSP_HIGHLIGHT_READ
Definition lsp.h:158
@ LSP_HIGHLIGHT_TEXT
Definition lsp.h:157
LSPSignatureInfo * lsp_signature_help(LSPDocument *doc, LSPPosition position, size_t *signature_count, ArenaAllocator *arena)
Definition lsp_features.c:868
const char * lookup_module(LSPServer *server, const char *module_name)
Definition lsp_module.c:235
void serialize_document_highlights(LSPDocumentHighlight *highlights, size_t count, char *output, size_t output_size)
Definition lsp_json.c:492
int extract_int(const char *json, const char *key)
Definition lsp_json.c:153
LSPDocumentSymbol ** lsp_document_symbols(LSPDocument *doc, size_t *symbol_count, ArenaAllocator *arena)
Definition lsp_symbols.c:42
LSPSymbolKind
Definition lsp.h:84
@ LSP_SYMBOL_CLASS
Definition lsp.h:89
@ LSP_SYMBOL_MODULE
Definition lsp.h:86
@ LSP_SYMBOL_FUNCTION
Definition lsp.h:96
@ LSP_SYMBOL_PROPERTY
Definition lsp.h:91
@ LSP_SYMBOL_CONSTANT
Definition lsp.h:98
@ LSP_SYMBOL_PACKAGE
Definition lsp.h:88
@ LSP_SYMBOL_VARIABLE
Definition lsp.h:97
@ LSP_SYMBOL_BOOLEAN
Definition lsp.h:101
@ LSP_SYMBOL_INTERFACE
Definition lsp.h:95
@ LSP_SYMBOL_NUMBER
Definition lsp.h:100
@ LSP_SYMBOL_CONSTRUCTOR
Definition lsp.h:93
@ LSP_SYMBOL_ENUM
Definition lsp.h:94
@ LSP_SYMBOL_STRUCT
Definition lsp.h:103
@ LSP_SYMBOL_METHOD
Definition lsp.h:90
@ LSP_SYMBOL_FILE
Definition lsp.h:85
@ LSP_SYMBOL_FIELD
Definition lsp.h:92
@ LSP_SYMBOL_NAMESPACE
Definition lsp.h:87
@ LSP_SYMBOL_STRING
Definition lsp.h:99
@ LSP_SYMBOL_ARRAY
Definition lsp.h:102
const char * lsp_uri_to_path(const char *uri, ArenaAllocator *arena)
Definition lsp_server.c:124
LSPPosition extract_position(const char *json)
Definition lsp_json.c:176
void serialize_signature_help(LSPSignatureInfo *sig, char *output, size_t output_size)
Definition lsp_json.c:434
Symbol * lsp_symbol_at_position(LSPDocument *doc, LSPPosition position)
Definition lsp_document.c:385
void lsp_ast_cache_invalidate(LSPServer *server, const char *uri)
Definition lsp_module.c:496
void build_module_registry(LSPServer *server, const char *workspace_uri)
Definition lsp_module.c:221
bool lsp_server_init(LSPServer *server, ArenaAllocator *arena)
Definition lsp_server.c:149
LSPInsertTextFormat
Definition lsp.h:187
@ LSP_INSERT_FORMAT_SNIPPET
Definition lsp.h:189
@ LSP_INSERT_FORMAT_PLAIN_TEXT
Definition lsp.h:188
LSPDiagnostic * lsp_diagnostics(LSPDocument *doc, size_t *diagnostic_count, ArenaAllocator *arena)
Definition lsp_diagnostics.c:74
LSPCompletionItemKind
Definition lsp.h:171
@ LSP_COMPLETION_VARIABLE
Definition lsp.h:177
@ LSP_COMPLETION_METHOD
Definition lsp.h:173
@ LSP_COMPLETION_SNIPPET
Definition lsp.h:183
@ LSP_COMPLETION_PROPERTY
Definition lsp.h:181
@ LSP_COMPLETION_INTERFACE
Definition lsp.h:179
@ LSP_COMPLETION_FUNCTION
Definition lsp.h:174
@ LSP_COMPLETION_CLASS
Definition lsp.h:178
@ LSP_COMPLETION_TEXT
Definition lsp.h:172
@ LSP_COMPLETION_FIELD
Definition lsp.h:176
@ LSP_COMPLETION_STRUCT
Definition lsp.h:184
@ LSP_COMPLETION_MODULE
Definition lsp.h:180
@ LSP_COMPLETION_CONSTRUCTOR
Definition lsp.h:175
@ LSP_COMPLETION_KEYWORD
Definition lsp.h:182
bool lsp_document_close(LSPServer *server, const char *uri)
Definition lsp_document.c:66
void lsp_handle_message(LSPServer *server, const char *message)
Definition lsp_message.c:72
LSPMethod lsp_parse_method(const char *json)
Definition lsp_json.c:190
void lsp_server_run(LSPServer *server)
Definition lsp_server.c:173
void lsp_negative_cache_clear(void)
Definition lsp_module.c:37
AstNode * lsp_node_at_position(LSPDocument *doc, LSPPosition position)
Definition lsp_symbols.c:4
char * lsp_semantic_tokens_full(LSPDocument *doc, ArenaAllocator *arena)
Definition lsp_semantic_tokens.c:363
const char * serialize_rename_result(const char *edit_json, ArenaAllocator *arena)
const char * lsp_semantic_tokens_capabilities(void)
Definition lsp_semantic_tokens.c:454
LSPDocumentHighlight * lsp_document_highlight(LSPDocument *doc, LSPPosition position, size_t *highlight_count, ArenaAllocator *arena)
Definition lsp_features.c:1054
Token * lsp_token_at_position(LSPDocument *doc, LSPPosition position)
Definition lsp_document.c:363
LSPLocation * lsp_definition(LSPDocument *doc, LSPServer *server, LSPPosition position, ArenaAllocator *arena)
Definition lsp_features.c:440
LSPCodeAction * lsp_code_action(LSPDocument *doc, LSPPosition position, size_t *action_count, ArenaAllocator *arena)
Definition lsp_features.c:1011
#define MODULE_AST_CACHE_MAX
Definition lsp.h:266
void scan_std_library(LSPServer *server)
void lsp_server_shutdown(LSPServer *server)
Definition lsp_server.c:282
LSPMessageType
Definition lsp.h:19
@ LSP_RESPONSE
Definition lsp.h:19
@ LSP_NOTIFICATION
Definition lsp.h:19
@ LSP_REQUEST
Definition lsp.h:19
char * extract_string(const char *json, const char *key, ArenaAllocator *arena)
Definition lsp_json.c:78
bool lsp_document_update(LSPServer *server, const char *uri, const char *content, int version)
Definition lsp_document.c:43
LSPMethod
Definition lsp.h:21
@ LSP_METHOD_TEXT_DOCUMENT_CODE_ACTION
Definition lsp.h:35
@ LSP_METHOD_TEXT_DOCUMENT_COMPLETION_ITEM_RESOLVE
Definition lsp.h:38
@ LSP_METHOD_TEXT_DOCUMENT_SIGNATURE_HELP
Definition lsp.h:34
@ LSP_METHOD_TEXT_DOCUMENT_DID_CHANGE
Definition lsp.h:27
@ LSP_METHOD_TEXT_DOCUMENT_SEMANTIC_TOKENS
Definition lsp.h:33
@ LSP_METHOD_UNKNOWN
Definition lsp.h:40
@ LSP_METHOD_TEXT_DOCUMENT_FORMATTING
Definition lsp.h:39
@ LSP_METHOD_TEXT_DOCUMENT_DEFINITION
Definition lsp.h:30
@ LSP_METHOD_SHUTDOWN
Definition lsp.h:24
@ LSP_METHOD_TEXT_DOCUMENT_COMPLETION
Definition lsp.h:31
@ LSP_METHOD_TEXT_DOCUMENT_DID_CLOSE
Definition lsp.h:28
@ LSP_METHOD_TEXT_DOCUMENT_DID_OPEN
Definition lsp.h:26
@ LSP_METHOD_TEXT_DOCUMENT_HOVER
Definition lsp.h:29
@ LSP_METHOD_TEXT_DOCUMENT_DOCUMENT_SYMBOL
Definition lsp.h:32
@ LSP_METHOD_TEXT_DOCUMENT_RENAME
Definition lsp.h:36
@ LSP_METHOD_EXIT
Definition lsp.h:25
@ LSP_METHOD_TEXT_DOCUMENT_DOCUMENT_HIGHLIGHT
Definition lsp.h:37
@ LSP_METHOD_INITIALIZE
Definition lsp.h:22
@ LSP_METHOD_INITIALIZED
Definition lsp.h:23
LSPDiagnostic * convert_errors_to_diagnostics(size_t *diagnostic_count, ArenaAllocator *arena)
Definition lsp_diagnostics.c:4
size_t json_escape(char *dst, size_t dst_size, const char *src)
Definition lsp_json.c:327
void lsp_send_notification(const char *method, const char *params)
Definition lsp_json.c:292
void resolve_imports(LSPServer *server, LSPDocument *doc, BuildConfig *config, GrowableArray *imported_modules)
Definition lsp_module.c:564
void extract_imports(LSPDocument *doc, ArenaAllocator *arena)
Definition lsp_module.c:364
Arena allocator structure.
Definition memory.h:101
Configuration structure to hold build options parsed from CLI.
Definition help.h:48
Growable array backed by an arena allocator.
Definition memory.h:112
const char * alias
Definition lsp.h:209
Scope * scope
Definition lsp.h:210
const char * module_path
Definition lsp.h:208
LSPSignatureInfo * signatures
Definition lsp.h:133
size_t active_signature
Definition lsp.h:135
size_t signature_count
Definition lsp.h:134
LSPParameterInfo * active_parameter
Definition lsp.h:136
const char * command
Definition lsp.h:146
const char * edit_uri
Definition lsp.h:149
const char * edit_title
Definition lsp.h:147
const char * edit_text
Definition lsp.h:148
const char * kind
Definition lsp.h:145
const char * title
Definition lsp.h:144
const char * insert_text
Definition lsp.h:195
const char * detail
Definition lsp.h:197
LSPCompletionItemKind kind
Definition lsp.h:194
const char * documentation
Definition lsp.h:198
const char * label
Definition lsp.h:193
const char * sort_text
Definition lsp.h:199
LSPInsertTextFormat format
Definition lsp.h:196
const char * filter_text
Definition lsp.h:200
const char * source
Definition lsp.h:77
const char * message
Definition lsp.h:76
LSPRange range
Definition lsp.h:74
LSPDiagnosticSeverity severity
Definition lsp.h:75
LSPDocumentHighlightKind kind
Definition lsp.h:164
LSPRange range
Definition lsp.h:163
LSPSymbolKind kind
Definition lsp.h:108
LSPRange range
Definition lsp.h:109
size_t child_count
Definition lsp.h:112
LSPRange selection_range
Definition lsp.h:110
const char * name
Definition lsp.h:107
struct LSPDocumentSymbol ** children
Definition lsp.h:111
Scope * scope
Definition lsp.h:244
size_t token_count
Definition lsp.h:242
size_t import_count
Definition lsp.h:250
ImportedModule * imports
Definition lsp.h:249
LSPDiagnostic * diagnostics
Definition lsp.h:245
AstNode * ast
Definition lsp.h:243
Token * tokens
Definition lsp.h:241
size_t diagnostic_count
Definition lsp.h:246
ArenaAllocator * arena
Definition lsp.h:253
const char * uri
Definition lsp.h:236
const char * content
Definition lsp.h:237
int version
Definition lsp.h:238
bool needs_reanalysis
Definition lsp.h:254
const char * uri
Definition lsp.h:58
LSPRange range
Definition lsp.h:59
const char * label
Definition lsp.h:120
const char * documentation
Definition lsp.h:121
int line
Definition lsp.h:48
int character
Definition lsp.h:49
LSPPosition start
Definition lsp.h:53
LSPPosition end
Definition lsp.h:54
LSPDocument ** documents
Definition lsp.h:270
bool initialized
Definition lsp.h:285
ArenaAllocator cache_arena
Definition lsp.h:281
ArenaAllocator * arena
Definition lsp.h:284
ModuleRegistry module_registry
Definition lsp.h:275
size_t document_count
Definition lsp.h:271
size_t ast_cache_count
Definition lsp.h:280
int client_process_id
Definition lsp.h:286
size_t document_capacity
Definition lsp.h:272
size_t active_parameter
Definition lsp.h:128
size_t parameter_count
Definition lsp.h:127
const char * documentation
Definition lsp.h:129
const char * label
Definition lsp.h:125
LSPParameterInfo * parameters
Definition lsp.h:126
long mtime
Definition lsp.h:263
AstNode * ast
Definition lsp.h:262
const char * uri
Definition lsp.h:261
const char * module_uri
Definition lsp.h:227
AstNode * ast
Definition lsp.h:225
Scope * scope
Definition lsp.h:226
const char * file_uri
Definition lsp.h:215
const char * module_name
Definition lsp.h:214
ModuleRegistryEntry * entries
Definition lsp.h:219
size_t count
Definition lsp.h:220
size_t capacity
Definition lsp.h:221
Represents a lexical scope with hierarchical relationships.
Definition type.h:67
Represents a symbol with associated type and metadata.
Definition type.h:54
Represents a single token extracted by the lexer.
Definition lexer.h:151