Updated both the Cure Language Server Protocol (LSP) and Model Context Protocol (MCP) servers to ensure compatibility with the latest compiler API changes. Both servers now compile successfully and are ready for use.
mcp/cure_mcp_server.erl)cure_typechecker:typecheck(AST) returning {ok, TypedAST} | {error, TypeError}cure_typechecker:check_program(AST) returning #typecheck_result{} recordcompile_cure_code/3 and type_check_cure_code/1 functionscure_codegen:generate(TypedAST, OutputDir) cure_codegen:compile_program(AST) returning {ok, Modules}cure_codegen:write_beam_module/2typecheck_result record definition at module toperlang
-record(typecheck_result, {
success :: boolean(),
type :: term() | undefined,
errors :: [term()],
warnings :: [term()]\n }).The LSP server (src/lsp/cure_lsp_server.erl) was already using the correct APIs:
- ✅ Uses cure_typechecker:check_module/2 and builtin_env/0
- ✅ Uses correct lexer and parser APIs
- ✅ Includes proper record definitions via cure_ast.hrl
- ✅ No changes required
Both servers compile successfully with only minor warnings about unused variables:
Line (acceptable in error handling)FilePath (reserved for future use)make all # ✅ Successful with warnings
./cure-lsp --help # ✅ Working
./cure-mcp --help # ✅ Working
cure_lexer:tokenize/1 - Returns {ok, Tokens} | {error, Reason}cure_parser:parse/1 - Returns {ok, AST} | {error, ParseError}cure_typechecker:check_program/1 - Returns #typecheck_result{}cure_typechecker:check_module/2 - Returns {ok, Env, Result} | {error, Error}cure_codegen:compile_program/1,2 - Returns {ok, Modules} | {error, Error}%% Check entire program
Result = cure_typechecker:check_program(AST),
case Result#typecheck_result.success of
true -> ok;
false -> Errors = Result#typecheck_result.errors
end.
%% Check module
{ok, NewEnv, Result} = cure_typechecker:check_module(ModuleAST, Env),
{error, Error} = cure_typechecker:check_module(BadModule, Env).
%% Get builtin environment
Env = cure_typechecker:builtin_env().
%% Compile program
{ok, Modules} = cure_codegen:compile_program(AST),
%% Compile with options
Options = [{debug_info, true}, {optimize, 2}],
{ok, Modules} = cure_codegen:compile_program(AST, Options),
%% Write BEAM file
lists:foreach(fun(Mod) ->
ModName = element(2, Mod),
BeamFile = atom_to_list(ModName) ++ ".beam",
cure_codegen:write_beam_module(Mod, BeamFile)
end, Modules).
%% Tokenize source code
{ok, Tokens} = cure_lexer:tokenize(SourceBinary),
{error, {Reason, Line, Col}} = cure_lexer:tokenize(BadSource),
%% Parse tokens to AST
{ok, AST} = cure_parser:parse(Tokens),
{error, ParseError} = cure_parser:parse(BadTokens).
mcp/cure_mcp_server.erlcompile_cure_code/3 to use check_program and compile_programtype_check_cure_code/1 to use check_programtypecheck_result record definitionensure_binary/1 helper to handle JSON string/binary conversionformat_success/2 and format_error/2 to use iolist_to_binarysummarize_ast/1 to return binary instead of stringsrc/lsp/cure_lsp_server.erl - Already using correct APIssrc/lsp/cure_lsp_code_actions.erl - Compatible with current ASTsrc/lsp/cure_lsp_diagnostics.erl - Compatible with current ASTsrc/lsp/cure_lsp_performance.erl - Compatible with current ASTsrc/lsp/cure_lsp_smt.erl - Compatible with current ASTsrc/lsp/cure_lsp_type_holes.erl - Compatible with current ASTcure_lexer - ✅ API stablecure_parser - ✅ API stablecure_typechecker - ✅ Updated to use check_program/1cure_codegen - ✅ Updated to use compile_program/1,2compile_cure - Full compilation with BEAM outputparse_cure - AST parsing and validationtype_check_cure - Type checking verificationget_ast - AST representationanalyze_fsm - FSM structure analysisvalidate_syntax - Syntax validationget_syntax_help - Language documentationget_examples - Example code browsingget_stdlib_docs - Standard library documentationcure_typechecker:check_program/1,2cure_codegen:compile_program/1,2cure_codegen:write_beam_module/2