Luma 0.1.0
A low-level compiled alternative to C, C++, and more!
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Enumerations | Functions
lsp.h File Reference

Language Server Protocol implementation for Luma language. More...

#include "../c_libs/memory/memory.h"
#include "../lexer/lexer.h"
#include "../parser/parser.h"
#include "../typechecker/type.h"
#include <stdbool.h>
#include <stddef.h>
Include dependency graph for lsp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  LSPPosition
 
struct  LSPRange
 
struct  LSPLocation
 
struct  LSPDiagnostic
 
struct  LSPDocumentSymbol
 
struct  LSPParameterInfo
 
struct  LSPSignatureInfo
 
struct  LPSignatureHelp
 
struct  LSPCodeAction
 
struct  LSPDocumentHighlight
 
struct  LSPCompletionItem
 
struct  ImportedModule
 
struct  ModuleRegistryEntry
 
struct  ModuleRegistry
 
struct  ModuleInfo
 
struct  LSPDocument
 
struct  ModuleASTCacheEntry
 
struct  LSPServer
 

Macros

#define MODULE_AST_CACHE_MAX   128
 

Typedefs

typedef struct LSPDocumentSymbol LSPDocumentSymbol
 

Enumerations

enum  LSPMessageType { LSP_REQUEST , LSP_RESPONSE , LSP_NOTIFICATION }
 
enum  LSPMethod {
  LSP_METHOD_INITIALIZE , LSP_METHOD_INITIALIZED , LSP_METHOD_SHUTDOWN , LSP_METHOD_EXIT ,
  LSP_METHOD_TEXT_DOCUMENT_DID_OPEN , LSP_METHOD_TEXT_DOCUMENT_DID_CHANGE , LSP_METHOD_TEXT_DOCUMENT_DID_CLOSE , LSP_METHOD_TEXT_DOCUMENT_HOVER ,
  LSP_METHOD_TEXT_DOCUMENT_DEFINITION , LSP_METHOD_TEXT_DOCUMENT_COMPLETION , LSP_METHOD_TEXT_DOCUMENT_DOCUMENT_SYMBOL , LSP_METHOD_TEXT_DOCUMENT_SEMANTIC_TOKENS ,
  LSP_METHOD_TEXT_DOCUMENT_SIGNATURE_HELP , LSP_METHOD_TEXT_DOCUMENT_CODE_ACTION , LSP_METHOD_TEXT_DOCUMENT_RENAME , LSP_METHOD_TEXT_DOCUMENT_DOCUMENT_HIGHLIGHT ,
  LSP_METHOD_TEXT_DOCUMENT_COMPLETION_ITEM_RESOLVE , LSP_METHOD_TEXT_DOCUMENT_FORMATTING , LSP_METHOD_UNKNOWN
}
 
enum  LSPDiagnosticSeverity { LSP_DIAGNOSTIC_ERROR = 1 , LSP_DIAGNOSTIC_WARNING = 2 , LSP_DIAGNOSTIC_INFORMATION = 3 , LSP_DIAGNOSTIC_HINT = 4 }
 
enum  LSPSymbolKind {
  LSP_SYMBOL_FILE = 1 , LSP_SYMBOL_MODULE = 2 , LSP_SYMBOL_NAMESPACE = 3 , LSP_SYMBOL_PACKAGE = 4 ,
  LSP_SYMBOL_CLASS = 5 , LSP_SYMBOL_METHOD = 6 , LSP_SYMBOL_PROPERTY = 7 , LSP_SYMBOL_FIELD = 8 ,
  LSP_SYMBOL_CONSTRUCTOR = 9 , LSP_SYMBOL_ENUM = 10 , LSP_SYMBOL_INTERFACE = 11 , LSP_SYMBOL_FUNCTION = 12 ,
  LSP_SYMBOL_VARIABLE = 13 , LSP_SYMBOL_CONSTANT = 14 , LSP_SYMBOL_STRING = 15 , LSP_SYMBOL_NUMBER = 16 ,
  LSP_SYMBOL_BOOLEAN = 17 , LSP_SYMBOL_ARRAY = 18 , LSP_SYMBOL_STRUCT = 23
}
 
enum  LSPDocumentHighlightKind { LSP_HIGHLIGHT_TEXT = 1 , LSP_HIGHLIGHT_READ = 2 , LSP_HIGHLIGHT_WRITE = 3 }
 
enum  LSPCompletionItemKind {
  LSP_COMPLETION_TEXT = 1 , LSP_COMPLETION_METHOD = 2 , LSP_COMPLETION_FUNCTION = 3 , LSP_COMPLETION_CONSTRUCTOR = 4 ,
  LSP_COMPLETION_FIELD = 5 , LSP_COMPLETION_VARIABLE = 6 , LSP_COMPLETION_CLASS = 7 , LSP_COMPLETION_INTERFACE = 8 ,
  LSP_COMPLETION_MODULE = 9 , LSP_COMPLETION_PROPERTY = 10 , LSP_COMPLETION_KEYWORD = 14 , LSP_COMPLETION_SNIPPET = 15 ,
  LSP_COMPLETION_STRUCT = 22
}
 
enum  LSPInsertTextFormat { LSP_INSERT_FORMAT_PLAIN_TEXT = 1 , LSP_INSERT_FORMAT_SNIPPET = 2 }
 

Functions

bool lsp_server_init (LSPServer *server, ArenaAllocator *arena)
 
void lsp_server_run (LSPServer *server)
 
void lsp_server_shutdown (LSPServer *server)
 
void lsp_handle_message (LSPServer *server, const char *message)
 
LSPDocumentlsp_document_open (LSPServer *server, const char *uri, const char *content, int version)
 
bool lsp_document_update (LSPServer *server, const char *uri, const char *content, int version)
 
bool lsp_document_close (LSPServer *server, const char *uri)
 
LSPDocumentlsp_document_find (LSPServer *server, const char *uri)
 
bool lsp_document_analyze (LSPDocument *doc, LSPServer *server, BuildConfig *config)
 
void scan_std_library (LSPServer *server)
 
void extract_imports (LSPDocument *doc, ArenaAllocator *arena)
 
void resolve_imports (LSPServer *server, LSPDocument *doc, BuildConfig *config, GrowableArray *imported_modules)
 
void build_module_registry (LSPServer *server, const char *workspace_uri)
 
const char * lookup_module (LSPServer *server, const char *module_name)
 
AstNodeparse_imported_module_ast (LSPServer *server, const char *module_uri, BuildConfig *config, ArenaAllocator *arena)
 
void lsp_ast_cache_init (LSPServer *server)
 
void lsp_ast_cache_invalidate (LSPServer *server, const char *uri)
 
void lsp_negative_cache_clear (void)
 
void lsp_check_pending_analysis (LSPServer *server)
 
const char * lsp_hover (LSPDocument *doc, LSPPosition position, ArenaAllocator *arena)
 
LSPLocationlsp_definition (LSPDocument *doc, LSPServer *server, LSPPosition position, ArenaAllocator *arena)
 
LSPCompletionItemlsp_completion (LSPDocument *doc, LSPPosition position, size_t *completion_count, ArenaAllocator *arena)
 
LSPCompletionItemlsp_completion_resolve (LSPCompletionItem *item, ArenaAllocator *arena)
 
LSPSignatureInfolsp_signature_help (LSPDocument *doc, LSPPosition position, size_t *signature_count, ArenaAllocator *arena)
 
LSPCodeActionlsp_code_action (LSPDocument *doc, LSPPosition position, size_t *action_count, ArenaAllocator *arena)
 
LSPDocumentHighlightlsp_document_highlight (LSPDocument *doc, LSPPosition position, size_t *highlight_count, ArenaAllocator *arena)
 
const char * lsp_rename (LSPDocument *doc, LSPPosition position, const char *new_name, ArenaAllocator *arena)
 
LSPDocumentSymbol ** lsp_document_symbols (LSPDocument *doc, size_t *symbol_count, ArenaAllocator *arena)
 
LSPDiagnosticlsp_diagnostics (LSPDocument *doc, size_t *diagnostic_count, ArenaAllocator *arena)
 
LSPDiagnosticconvert_errors_to_diagnostics (size_t *diagnostic_count, ArenaAllocator *arena)
 
LSPMethod lsp_parse_method (const char *json)
 
void lsp_send_response (int id, const char *result)
 
void lsp_send_request (const char *method, const char *params)
 
void lsp_send_notification (const char *method, const char *params)
 
void lsp_send_error (int id, int code, const char *message)
 
char * extract_string (const char *json, const char *key, ArenaAllocator *arena)
 
int extract_int (const char *json, const char *key)
 
LSPPosition extract_position (const char *json)
 
size_t json_escape (char *dst, size_t dst_size, const char *src)
 
void serialize_diagnostics_to_json (const char *uri, LSPDiagnostic *diagnostics, size_t diag_count, char *output, size_t output_size)
 
void serialize_completion_items (LSPCompletionItem *items, size_t count, char *output, size_t output_size)
 
void serialize_signature_help (LSPSignatureInfo *sig, char *output, size_t output_size)
 
void serialize_code_actions (LSPCodeAction *actions, size_t count, char *output, size_t output_size)
 
void serialize_document_highlights (LSPDocumentHighlight *highlights, size_t count, char *output, size_t output_size)
 
const char * serialize_rename_result (const char *edit_json, ArenaAllocator *arena)
 
const char * lsp_uri_to_path (const char *uri, ArenaAllocator *arena)
 
const char * lsp_path_to_uri (const char *path, ArenaAllocator *arena)
 
Tokenlsp_token_at_position (LSPDocument *doc, LSPPosition position)
 
AstNodelsp_node_at_position (LSPDocument *doc, LSPPosition position)
 
Symbollsp_symbol_at_position (LSPDocument *doc, LSPPosition position)
 
char * lsp_semantic_tokens_full (LSPDocument *doc, ArenaAllocator *arena)
 
const char * lsp_semantic_tokens_capabilities (void)
 

Detailed Description

Language Server Protocol implementation for Luma language.

Macro Definition Documentation

◆ MODULE_AST_CACHE_MAX

#define MODULE_AST_CACHE_MAX   128

Typedef Documentation

◆ LSPDocumentSymbol

Enumeration Type Documentation

◆ LSPCompletionItemKind

Enumerator
LSP_COMPLETION_TEXT 
LSP_COMPLETION_METHOD 
LSP_COMPLETION_FUNCTION 
LSP_COMPLETION_CONSTRUCTOR 
LSP_COMPLETION_FIELD 
LSP_COMPLETION_VARIABLE 
LSP_COMPLETION_CLASS 
LSP_COMPLETION_INTERFACE 
LSP_COMPLETION_MODULE 
LSP_COMPLETION_PROPERTY 
LSP_COMPLETION_KEYWORD 
LSP_COMPLETION_SNIPPET 
LSP_COMPLETION_STRUCT 

◆ LSPDiagnosticSeverity

Enumerator
LSP_DIAGNOSTIC_ERROR 
LSP_DIAGNOSTIC_WARNING 
LSP_DIAGNOSTIC_INFORMATION 
LSP_DIAGNOSTIC_HINT 

◆ LSPDocumentHighlightKind

Enumerator
LSP_HIGHLIGHT_TEXT 
LSP_HIGHLIGHT_READ 
LSP_HIGHLIGHT_WRITE 

◆ LSPInsertTextFormat

Enumerator
LSP_INSERT_FORMAT_PLAIN_TEXT 
LSP_INSERT_FORMAT_SNIPPET 

◆ LSPMessageType

Enumerator
LSP_REQUEST 
LSP_RESPONSE 
LSP_NOTIFICATION 

◆ LSPMethod

enum LSPMethod
Enumerator
LSP_METHOD_INITIALIZE 
LSP_METHOD_INITIALIZED 
LSP_METHOD_SHUTDOWN 
LSP_METHOD_EXIT 
LSP_METHOD_TEXT_DOCUMENT_DID_OPEN 
LSP_METHOD_TEXT_DOCUMENT_DID_CHANGE 
LSP_METHOD_TEXT_DOCUMENT_DID_CLOSE 
LSP_METHOD_TEXT_DOCUMENT_HOVER 
LSP_METHOD_TEXT_DOCUMENT_DEFINITION 
LSP_METHOD_TEXT_DOCUMENT_COMPLETION 
LSP_METHOD_TEXT_DOCUMENT_DOCUMENT_SYMBOL 
LSP_METHOD_TEXT_DOCUMENT_SEMANTIC_TOKENS 
LSP_METHOD_TEXT_DOCUMENT_SIGNATURE_HELP 
LSP_METHOD_TEXT_DOCUMENT_CODE_ACTION 
LSP_METHOD_TEXT_DOCUMENT_RENAME 
LSP_METHOD_TEXT_DOCUMENT_DOCUMENT_HIGHLIGHT 
LSP_METHOD_TEXT_DOCUMENT_COMPLETION_ITEM_RESOLVE 
LSP_METHOD_TEXT_DOCUMENT_FORMATTING 
LSP_METHOD_UNKNOWN 

◆ LSPSymbolKind

Enumerator
LSP_SYMBOL_FILE 
LSP_SYMBOL_MODULE 
LSP_SYMBOL_NAMESPACE 
LSP_SYMBOL_PACKAGE 
LSP_SYMBOL_CLASS 
LSP_SYMBOL_METHOD 
LSP_SYMBOL_PROPERTY 
LSP_SYMBOL_FIELD 
LSP_SYMBOL_CONSTRUCTOR 
LSP_SYMBOL_ENUM 
LSP_SYMBOL_INTERFACE 
LSP_SYMBOL_FUNCTION 
LSP_SYMBOL_VARIABLE 
LSP_SYMBOL_CONSTANT 
LSP_SYMBOL_STRING 
LSP_SYMBOL_NUMBER 
LSP_SYMBOL_BOOLEAN 
LSP_SYMBOL_ARRAY 
LSP_SYMBOL_STRUCT 

Function Documentation

◆ build_module_registry()

void build_module_registry ( LSPServer server,
const char *  workspace_uri 
)

◆ convert_errors_to_diagnostics()

LSPDiagnostic * convert_errors_to_diagnostics ( size_t *  diagnostic_count,
ArenaAllocator arena 
)

◆ extract_imports()

void extract_imports ( LSPDocument doc,
ArenaAllocator arena 
)

◆ extract_int()

int extract_int ( const char *  json,
const char *  key 
)

◆ extract_position()

LSPPosition extract_position ( const char *  json)

◆ extract_string()

char * extract_string ( const char *  json,
const char *  key,
ArenaAllocator arena 
)

◆ json_escape()

size_t json_escape ( char *  dst,
size_t  dst_size,
const char *  src 
)

◆ lookup_module()

const char * lookup_module ( LSPServer server,
const char *  module_name 
)

◆ lsp_ast_cache_init()

void lsp_ast_cache_init ( LSPServer server)

◆ lsp_ast_cache_invalidate()

void lsp_ast_cache_invalidate ( LSPServer server,
const char *  uri 
)

◆ lsp_check_pending_analysis()

void lsp_check_pending_analysis ( LSPServer server)

◆ lsp_code_action()

LSPCodeAction * lsp_code_action ( LSPDocument doc,
LSPPosition  position,
size_t *  action_count,
ArenaAllocator arena 
)

◆ lsp_completion()

LSPCompletionItem * lsp_completion ( LSPDocument doc,
LSPPosition  position,
size_t *  completion_count,
ArenaAllocator arena 
)

◆ lsp_completion_resolve()

LSPCompletionItem * lsp_completion_resolve ( LSPCompletionItem item,
ArenaAllocator arena 
)

◆ lsp_definition()

LSPLocation * lsp_definition ( LSPDocument doc,
LSPServer server,
LSPPosition  position,
ArenaAllocator arena 
)

◆ lsp_diagnostics()

LSPDiagnostic * lsp_diagnostics ( LSPDocument doc,
size_t *  diagnostic_count,
ArenaAllocator arena 
)

◆ lsp_document_analyze()

bool lsp_document_analyze ( LSPDocument doc,
LSPServer server,
BuildConfig config 
)

◆ lsp_document_close()

bool lsp_document_close ( LSPServer server,
const char *  uri 
)

◆ lsp_document_find()

LSPDocument * lsp_document_find ( LSPServer server,
const char *  uri 
)

◆ lsp_document_highlight()

LSPDocumentHighlight * lsp_document_highlight ( LSPDocument doc,
LSPPosition  position,
size_t *  highlight_count,
ArenaAllocator arena 
)

◆ lsp_document_open()

LSPDocument * lsp_document_open ( LSPServer server,
const char *  uri,
const char *  content,
int  version 
)

◆ lsp_document_symbols()

LSPDocumentSymbol ** lsp_document_symbols ( LSPDocument doc,
size_t *  symbol_count,
ArenaAllocator arena 
)

◆ lsp_document_update()

bool lsp_document_update ( LSPServer server,
const char *  uri,
const char *  content,
int  version 
)

◆ lsp_handle_message()

void lsp_handle_message ( LSPServer server,
const char *  message 
)

◆ lsp_hover()

const char * lsp_hover ( LSPDocument doc,
LSPPosition  position,
ArenaAllocator arena 
)

◆ lsp_negative_cache_clear()

void lsp_negative_cache_clear ( void  )

◆ lsp_node_at_position()

AstNode * lsp_node_at_position ( LSPDocument doc,
LSPPosition  position 
)

◆ lsp_parse_method()

LSPMethod lsp_parse_method ( const char *  json)

◆ lsp_path_to_uri()

const char * lsp_path_to_uri ( const char *  path,
ArenaAllocator arena 
)

◆ lsp_rename()

const char * lsp_rename ( LSPDocument doc,
LSPPosition  position,
const char *  new_name,
ArenaAllocator arena 
)

◆ lsp_semantic_tokens_capabilities()

const char * lsp_semantic_tokens_capabilities ( void  )

◆ lsp_semantic_tokens_full()

char * lsp_semantic_tokens_full ( LSPDocument doc,
ArenaAllocator arena 
)

◆ lsp_send_error()

void lsp_send_error ( int  id,
int  code,
const char *  message 
)

◆ lsp_send_notification()

void lsp_send_notification ( const char *  method,
const char *  params 
)

◆ lsp_send_request()

void lsp_send_request ( const char *  method,
const char *  params 
)

◆ lsp_send_response()

void lsp_send_response ( int  id,
const char *  result 
)

◆ lsp_server_init()

bool lsp_server_init ( LSPServer server,
ArenaAllocator arena 
)

◆ lsp_server_run()

void lsp_server_run ( LSPServer server)

◆ lsp_server_shutdown()

void lsp_server_shutdown ( LSPServer server)

◆ lsp_signature_help()

LSPSignatureInfo * lsp_signature_help ( LSPDocument doc,
LSPPosition  position,
size_t *  signature_count,
ArenaAllocator arena 
)

◆ lsp_symbol_at_position()

Symbol * lsp_symbol_at_position ( LSPDocument doc,
LSPPosition  position 
)

◆ lsp_token_at_position()

Token * lsp_token_at_position ( LSPDocument doc,
LSPPosition  position 
)

◆ lsp_uri_to_path()

const char * lsp_uri_to_path ( const char *  uri,
ArenaAllocator arena 
)

◆ parse_imported_module_ast()

AstNode * parse_imported_module_ast ( LSPServer server,
const char *  module_uri,
BuildConfig config,
ArenaAllocator arena 
)

◆ resolve_imports()

void resolve_imports ( LSPServer server,
LSPDocument doc,
BuildConfig config,
GrowableArray imported_modules 
)

◆ scan_std_library()

void scan_std_library ( LSPServer server)

◆ serialize_code_actions()

void serialize_code_actions ( LSPCodeAction actions,
size_t  count,
char *  output,
size_t  output_size 
)

◆ serialize_completion_items()

void serialize_completion_items ( LSPCompletionItem items,
size_t  count,
char *  output,
size_t  output_size 
)

◆ serialize_diagnostics_to_json()

void serialize_diagnostics_to_json ( const char *  uri,
LSPDiagnostic diagnostics,
size_t  diag_count,
char *  output,
size_t  output_size 
)

◆ serialize_document_highlights()

void serialize_document_highlights ( LSPDocumentHighlight highlights,
size_t  count,
char *  output,
size_t  output_size 
)

◆ serialize_rename_result()

const char * serialize_rename_result ( const char *  edit_json,
ArenaAllocator arena 
)

◆ serialize_signature_help()

void serialize_signature_help ( LSPSignatureInfo sig,
char *  output,
size_t  output_size 
)