Skip to content

rescriptls quit with exit code 1 and signal 0 #1105

Open
@Zeta611

Description

@Zeta611

I can't get rescript-language-server working in my NeoVim w/

return {
	{ "rescript-lang/vim-rescript", ft = "rescript" },
	{
		"neovim/nvim-lspconfig",
		opts = {
			servers = {
				rescriptls = {
					mason = false,
				},
			},
		},
	},
}

where I manually installed rescript-language-server 1.62.0 on my Nix-managed NeoVim.

Here is a log:

Log

[ERROR][2025-07-03 23:53:46] ...p/_transport.lua:36"rpc" "rescript-language-server" "stderr" "/nix/store/smsf3d20n08h6h03b8hix19i6273nc14-rescript-language-server-1.62.0/lib/node_modules/@rescript/language-server/out/cli.js:42\n${h});let v={type:yh.MessageType.Warning,message:[Incremental typechecking] Something might have gone wrong with incremental type checking. Check out the error log and report this issue please.};n({jsonrpc:Z,method:\"window/showMessage\",params:v})}catch(j){console.error(j)}let M={jsonrpc:Z,method:\"textDocument/publishDiagnostics\",params:{uri:(0,Ac.pathToFileURL)(t.file.sourceFilePath),diagnostics:N}};n(M)}r?.()});t.killCompilationListeners.push(()=>{a.kill(\"SIGKILL\")})}catch(a){console.error(a)}}function Dh(t,e,n,r){ht()&&console.log(\"Updated: \"+t),Yv(t,e,n,r)}function Ph(t){ht()&&console.log(\"Closed: \"+t);let e=jn.get(t);e!=null&&(wh(t,e.project.rootPath),jn.delete(t),Nc.delete(e.file.originalTypeFileLocation),bh.unwatch([e.file.originalTypeFileLocation]))}function Eh(t){let e=jn.get(t);return e!=null?e.codeActions:null}var Lc={},Oc=null,jc=!1,Hc=0,Ic=!1,Zr=new Map,Ah={},ne=t=>{},qh=t=>le.extensionConfiguration.binaryPath==null?_n(t,pe.join(Zn,Jn)):so(le.extensionConfiguration.binaryPath,Jn),Zv=new ti.RequestType(\"textDocument/createInterface\"),ew=new ti.RequestType(\"textDocument/openCompiled\"),tw=t=>{let e=null;return Ve.forEach((n,r)=>{e==null&&n.filesDiagnostics[t]!=null&&(e=n.filesDiagnostics[t].slice())}),e??[]},nw=()=>{Ve.forEach((t,e)=>{let{filesWithDiagnostics:n}=t,r=pe.join(e,Ji),i=$e.default.readFileSync(r,{encoding:\"utf-8\"}),{done:o,result:s,codeActions:a,linesWithParseErrors:u}=ao(i);if(u.length>0){let p={type:B.MessageType.Warning,message:There are more compiler warning/errors that we could not parse. You can help us fix this by opening an issue on the repository, pasting the contents of the file lib/bs/.compiler.log.};ne({jsonrpc:Z,method:\"window/showMessage\",params:p})}t.filesDiagnostics=s,Ah=a,Object.keys(s).forEach(p=>{let h={uri:p,diagnostics:s[p]};ne({jsonrpc:Z,method:\"textDocument/publishDiagnostics\",params:h}),n.add(p)}),o&&n.forEach(p=>{s[p]==null&&(ne({jsonrpc:Z,method:\"textDocument/publishDiagnostics\",params:{uri:p,diagnostics:[]}}),n.delete(p))})})},rw=t=>{let e=Ve.get(t);e!=null&&(e.filesWithDiagnostics.forEach(n=>{ne({jsonrpc:Z,method:\"textDocument/publishDiagnostics\",params:{uri:n,diagnostics:[]}})}),Ve.delete(t),le.extensionConfiguration.incrementalTypechecking?.enable&&Fc(t))},iw=()=>{ne({jsonrpc:Z,method:\"rescript/compilationFinished\"})},ar=!1,Nh=t=>{try{ar&&console.log(\"syncing project config cache for \"+t),Vt(t,[\"cache-project\",t]),ar&&console.log(\"OK - synced project config cache for \"+t)}catch(e){ar&&console.error(e)}},ow=t=>{try{ar&&console.log(\"deleting project config cache for \"+t),Vt(t,[\"cache-delete\",t]),ar&&console.log(\"OK - deleted project config cache for \"+t)}catch(e){ar&&console.error(e)}},ei=xh.watch([],{awaitWriteFinish:{stabilityThreshold:1}}).on(\"all\",(t,e)=>{if(e.includes(\"build.ninja\")){if(le.extensionConfiguration.cache?.projectConfig?.enable===!0){let n=wt(e);n!=null&&Nh(n)}}else try{nw(),iw(),le.extensionConfiguration.inlayHints?.enable===!0&&Fh(),le.extensionConfiguration.codeLens===!0&&Oh()}catch{console.log(\"Error while sending updated diagnostics\")}}),sw=()=>{ei.close()},aw=(t,e)=>{let n=(0,Se.fileURLToPath)(t);Zr.set(n,e);let r=wt(n);if(r!=null){let i=Ve.get(r);if(i==null){le.extensionConfiguration.incrementalTypechecking?.enable&&vh(r);let a=Wr(r);i={openFiles:new Set,filesWithDiagnostics:new Set,filesDiagnostics:{},namespaceName:a.kind===\"success\"?a.result:null,rescriptVersion:Na(r),bsbWatcherByEditor:null,bscBinaryLocation:pd(r),editorAnalysisLocation:md(r),hasPromptedToStartBuild:/(\\/|\\\\)node_modules(\\/|\\\\)/.test(r)?\"never\":!1},Ve.set(r,i),ei.add(pe.join(r,Ji)),le.extensionConfiguration.cache?.projectConfig?.enable===!0&&(ei.add(pe.join(r,Ir)),Nh(r))}Ve.get(r).openFiles.add(n);let s=pe.join(r,Ul);if(i.hasPromptedToStartBuild===!1&&le.extensionConfiguration.askToStartBuild===!0&&!$e.default.existsSync(s))if(qh(r)!=null){let a={title:Ta,projectRootPath:r},u={type:B.MessageType.Info,message:\"Start a build for this project to get the freshest data?\",actions:[a]},p={jsonrpc:Z,id:Hc++,method:\"window/showMessageRequest\",params:u};ne(p),i.hasPromptedToStartBuild=!0}else{let a={jsonrpc:Z,method:\"window/showMessage\",params:{type:B.MessageType.Error,message:le.extensionConfiguration.binaryPath==null?Can't find ReScript binary in ${pe.join(r,Zn)} or parent directories. Did you install it? It's required to use "rescript" > 9.1:Can't find ReScript binary in the directory ${le.extensionConfiguration.binaryPath}}};ne(a)}}},cw=t=>{let e=(0,Se.fileURLToPath)(t);le.extensionConfiguration.incrementalTypechecking?.enable&&Ph(e),Zr.delete(e);let n=wt(e);if(n!=null){let r=Ve.get(n);r!=null&&(r.openFiles.delete(e),r.openFiles.size===0&&(ei.unwatch(pe.join(n,Ji)),ei.unwatch(pe.join(n,Ir)),ow(n),rw(n),r.bsbWatcherByEditor!==null&&(r.bsbWatcherByEditor.kill(),r.bsbWatcherByEditor=null)))}},uw=(t,e)=>{let n=(0,Se.fileURLToPath)(t);(0,Mc.assert)(Zr.has(n)),Zr.set(n,e),le.extensionConfiguration.incrementalTypechecking?.enable&&Dh(n,e,ne,()=>{le.extensionConfiguration.codeLens&&Oh(),le.extensionConfiguration.inlayHints&&Fh()})},Ln=t=>{let e=(0,Se.fileURLToPath)(t),n=Zr.get(e);return(0,Mc.assert)(n!=null),n};function Ao(t=!1){if(t){let e=new xo.StreamMessageWriter(In.default.stdout),n=new xo.StreamMessageReader(In.default.stdin);ne=r=>e.write(r),n.listen(kh)}else ne=e=>In.default.send(e),In.default.on(\"message\",kh)}function lw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=Ln(e.textDocument.uri),i=on();$e.default.writeFileSync(i,r,{encoding:\"utf-8\"});let o=Ct(n,[\"hover\",n,e.position.line,e.position.character,i,!!Lc.supportsMarkdownLinks],t);return $e.default.unlink(i,()=>null),o}function dw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri);return Ct(n,[\"inlayHint\",n,e.range.start.line,e.range.end.line,le.extensionConfiguration.inlayHints?.maxLength],t)}function Fh(){let t={jsonrpc:Z,method:B.InlayHintRefreshRequest.method,id:Hc++};ne(t)}function fw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri);return Ct(n,[\"codeLens\",n],t)}function Oh(){let t={jsonrpc:Z,method:B.CodeLensRefreshRequest.method,id:Hc++};ne(t)}function hw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=Ln(e.textDocument.uri),i=on();$e.default.writeFileSync(i,r,{encoding:\"utf-8\"});let o=Ct(n,[\"signatureHelp\",n,e.position.line,e.position.character,i,le.extensionConfiguration.signatureHelp?.forConstructorPayloads?\"true\":\"false\"],t);return $e.default.unlink(i,()=>null),o}function pw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri);return Ct(n,[\"definition\",n,e.position.line,e.position.character],t)}function mw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri);return Ct(n,[\"typeDefinition\",n,e.position.line,e.position.character],t)}function gw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=Fa(n,e.position);return{jsonrpc:Z,id:t.id,result:r}}function yw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=Fa(n,e.position),i=null;return r!==null&&r.forEach(o=>{if(pe.normalize((0,Se.fileURLToPath)(o.uri))===pe.normalize((0,Se.fileURLToPath)(e.textDocument.uri))){let{start:s,end:a}=o.range,u=e.position;s.character<=u.character&&s.line<=u.line&&a.character>=u.character&&a.line>=u.line&&(i=o.range)}}),{jsonrpc:Z,id:t.id,result:i}}function _w(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=Vt(n,[\"rename\",n,e.position.line,e.position.character,e.newName]),i=null;return r!==null&&(i={documentChanges:r}),{jsonrpc:Z,id:t.id,result:i}}function Rw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=pe.extname(e.textDocument.uri),i=Ln(e.textDocument.uri),o=on(r);$e.default.writeFileSync(o,i,{encoding:\"utf-8\"});let s=Ct(n,[\"documentSymbol\",o],t,!1);return $e.default.unlink(o,()=>null),s}function Sh(){let t={items:[{section:\"rescript.settings\"}]},e={jsonrpc:Z,id:ka,method:B.ConfigurationRequest.type.method,params:t};ne(e)}function bw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=pe.extname(e.textDocument.uri),i=Ln(e.textDocument.uri),o=on(r);$e.default.writeFileSync(o,i,{encoding:\"utf-8\"});let s=Ct(n,[\"semanticTokens\",o],t,!1);return $e.default.unlink(o,()=>null),s}function vw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=Ln(e.textDocument.uri),i=on();$e.default.writeFileSync(i,r,{encoding:\"utf-8\"});let o=Ct(n,[\"completion\",n,e.position.line,e.position.character,i],t);return $e.default.unlink(i,()=>null),o}function ww(t){let e=t.params,n={jsonrpc:Z,id:t.id,result:e};if(e.documentation==null&&e.data!=null){let r=e.data,i=Vt(r.filePath,[\"completionResolve\",r.filePath,r.modulePath],!0);e.documentation={kind:\"markdown\",value:i}}return n}function Cw(t){let e=t.params,n=(0,Se.fileURLToPath)(e.textDocument.uri),r=Ln(e.textDocument.uri),i=pe.extname(e.textDocument.uri),o=on(i),s=[],a=Ah[e.textDocument.uri]??[],u=Eh(n)??[];[...a,...u].forEach(({range:A,codeAction:q})=>{fd(A,e.range)&&s.push(q)}),$e.default.writeFileSync(o,r,{encoding:\"utf-8\"});let p=Ct(n,[\"codeAction\",n,e.range.start.line,e.range.start.character,e.range.end.line,e.range.end.character,o],t);$e.default.unlink(o,()=>null);let{result:h}=p,y=h!=null&&Array.isArray(h)?[...s,...h]:s;return{jsonrpc:Z,id:t.id,result:y.length>0?y:null}}function Dw(t){let e={jsonrpc:Z,id:t.id,result:[]},n=t.params,r=(0,Se.fileURLToPath)(n.textDocument.uri),i=pe.extname(n.textDocument.uri);if(i!==Bt&&i!==Lr){let o={type:B.MessageType.Error,message:Not a ${Bt} or ${Lr} file. Cannot format it.};return[e,{jsonrpc:Z,method:\"window/showMessage\",params:o}]}else{let o=Ln(n.textDocument.uri),s=wt(r),u=(s!=null?Ve.get(s):null)?.bscBinaryLocation??null,p=ud(u,r,o);if(p.kind===\"success\"){let h=o.length,y=[{range:{start:{line:0,character:0},end:{line:h,character:h}},newText:p.result}];return[{jsonrpc:Z,id:t.id,result:y}]}else return[e]}}var Th=(t,e)=>{if(le.extensionConfiguration.incrementalTypechecking?.enable)return;let n=(0,Se.fileURLToPath)(t),r=pe.extname(n),i=on(r);$e.default.writeFileSync(i,e,{encoding:\"utf-8\"});let o=tw(t),s=Vt(n,[\"diagnosticSyntax\",i]),a={jsonrpc:Z,method:\"textDocument/publishDiagnostics\",params:{uri:t,diagnostics:[...s,...o]}};$e.default.unlink(i,()=>null),ne(a)};function Pw(t){let e=t.params,n=pe.extname(e.uri),r=(0,Se.fileURLToPath)(e.uri),i=wt(r);if(i===null){let q={type:B.MessageType.Error,message:\"Cannot locate project directory to generate the interface file.\"};return{jsonrpc:Z,method:\"window/showMessage\",params:q}}if(n!==Bt){let q={type:B.MessageType.Error,message:Not a ${Bt} file. Cannot create an interface for it.};return{jsonrpc:Z,method:\"window/showMessage\",params:q}}let o=r.split(i)[1],s=Wr(i);if(s.kind===\"error\"){let q={type:B.MessageType.Error,message:\"Error reading ReScript config file.\"};return{jsonrpc:Z,method:\"window/showMessage\",params:q}}let a=s.result,u=a.length>0?\"-\"+a:\"\",p=pe.join(pe.dirname(o),pe.basename(o,Bt)+u+zl),h=pe.join(i,er,p);if(!$e.default.existsSync(h)){let q={type:B.MessageType.Error,message:\"No compiled interface file found. Please compile your project first.\"};return{jsonrpc:Z,method:\"window/showMessage\",params:q}}let m=Ct(r,[\"createInterface\",r,h],t),A=typeof m.result==\"string\"?m.result:\"\";try{let q=eo(r,Lr);return $e.default.writeFileSync(q,A,{encoding:\"utf-8\"}),{jsonrpc:Z,id:t.id,result:{uri:Hr(q)}}}catch{return{jsonrpc:Z,id:t.id,error:{code:B.ErrorCodes.InternalError,message:\"Unable to create interface file.\"}}}}function Ew(t){let e=t.params,n=(0,Se.fileURLToPath)(e.uri),r=wt(n);if(r===null){let s={type:B.MessageType.Error,message:\"Cannot locate project directory.\"};return{jsonrpc:Z,method:\"window/showMessage\",params:s}}let i=ld(n,r);if(i.kind===\"error\"||!$e.default.existsSync(i.result)){let s=i.kind===\"success\"?No compiled file found. Expected it at: ${i.result}:\"No compiled file found. Please compile your project first.\",a={type:B.MessageType.Error,message:s};return{jsonrpc:Z,method:\"window/showMessage\",params:a}}return{jsonrpc:Z,id:t.id,result:{uri:Hr(i.result)}}}function kh(t){if(B.Message.isNotification(t)){if(!(!jc&&t.method!==\"exit\"))if(t.method===\"exit\")Ic?In.default.exit(0):In.default.exit(1);else if(t.method===Rn.DidOpenTextDocumentNotification.method){let e=t.params;aw(e.textDocument.uri,e.textDocument.text),Th(e.textDocument.uri,e.textDocument.text)}else if(t.method===Rn.DidChangeTextDocumentNotification.method){let e=t.params,n=pe.extname(e.textDocument.uri);if(n===Bt||n===Lr){let r=e.contentChanges;r.length===0||(uw(e.textDocument.uri,r[r.length-1].text),Th(e.textDocument.uri,r[r.length-1].text))}}else if(t.method===Rn.DidCloseTextDocumentNotification.method){let e=t.params;cw(e.textDocument.uri)}else t.method===Rn.DidChangeConfigurationNotification.type.method&&Sh()}else if(B.Message.isRequest(t))if(!jc&&t.method!==\"initialize\"){let e={jsonrpc:Z,id:t.id,error:{code:B.ErrorCodes.ServerNotInitialized,message:\"Server not initialized.\"}};ne(e)}else if(t.method===\"initialize\"){let e=t.params,n=e.initializationOptions?.extensionConfiguration;n!=null&&(le.extensionConfiguration=n);let r=e.initializationOptions?.extensionClientCapabilities;r!=null&&(Lc=r),Lc.supportsSnippetSyntax=!!e.capabilities.textDocument?.completion?.completionItem?.snippetSupport;let i={capabilities:{textDocumentSync:ti.TextDocumentSyncKind.Full,documentFormattingProvider:!0,hoverProvider:!0,definitionProvider:!0,typeDefinitionProvider:!0,referencesProvider:!0,codeActionProvider:!0,renameProvider:{prepareProvider:!0},documentSymbolProvider:!0,completionProvider:{triggerCharacters:[\".\",\">\",\"@\",\"~\",'\"',\"=\",\"(\"],resolveProvider:!0},semanticTokensProvider:{legend:{tokenTypes:[\"operator\",\"variable\",\"type\",\"modifier\",\"namespace\",\"enumMember\",\"property\",\"interface\"],tokenModifiers:[]},documentSelector:[{scheme:\"file\",language:\"rescript\"}],full:!0},inlayHintProvider:le.extensionConfiguration.inlayHints?.enable,codeLensProvider:le.extensionConfiguration.codeLens?{workDoneProgress:!1}:void 0,signatureHelpProvider:le.extensionConfiguration.signatureHelp?.enabled?{triggerCharacters:[\"(\"],retriggerCharacters:[\"=\",\",\"]}:void 0}},o={jsonrpc:Z,id:t.id,result:i};jc=!0,Oc=setInterval(()=>{Sh()},Yl),ne(o)}else if(t.method===\"initialized\"){let e={jsonrpc:Z,id:t.id,result:null};ne(e)}else if(t.method===\"shutdown\")if(Ic){let e={jsonrpc:Z,id:t.id,error:{code:B.ErrorCodes.InvalidRequest,message:\"Language server already received the shutdown request\"}};ne(e)}else{Ic=!0,sw(),Oc!=null&&clearInterval(Oc);let e={jsonrpc:Z,id:t.id,result:null};ne(e)}else if(t.method===B.HoverRequest.method)ne(lw(t));else if(t.method===B.DefinitionRequest.method)ne(pw(t));else if(t.method===B.TypeDefinitionRequest.method)ne(mw(t));else if(t.method===B.ReferencesRequest.method)ne(gw(t));else if(t.method===B.PrepareRenameRequest.method)ne(yw(t));else if(t.method===B.RenameRequest.method)ne(_w(t));else if(t.method===B.DocumentSymbolRequest.method)ne(Rw(t));else if(t.method===B.CompletionRequest.method)ne(vw(t));else if(t.method===B.CompletionResolveRequest.method)ne(ww(t));else if(t.method===B.SemanticTokensRequest.method)ne(bw(t));else if(t.method===B.CodeActionRequest.method)ne(Cw(t));else if(t.method===B.DocumentFormattingRequest.method)Dw(t).forEach(n=>ne(n));else if(t.method===Zv.method)ne(Pw(t));else if(t.method===ew.method)ne(Ew(t));else if(t.method===B.InlayHintRequest.method){let e=t.params;pe.extname(e.textDocument.uri)===Bt&&ne(dw(t))}else if(t.method===B.CodeLensRequest.method){let e=t.params;pe.extname(e.textDocument.uri)===Bt&&ne(fw(t))}else if(t.method===B.SignatureHelpRequest.method){let e=t.params;pe.extname(e.textDocument.uri)===Bt&&ne(hw(t))}else{let e={jsonrpc:Z,id:t.id,error:{code:B.ErrorCodes.InvalidRequest,message:\"Unrecognized editor request.\"}};ne(e)}else if(B.Message.isResponse(t)){if(t.id===ka){if(t.result!=null){let[e]=t.result;e!=null&&(le.extensionConfiguration=e)}}else if(t.result!=null&&t.result.title!=null&&t.result.title===Ta){let n=t.result.projectRootPath,r=qh(n);if(r!=null){let i=dd(r,n),o=Ve.get(n);o.bsbWatcherByEditor=i}}}}od(t=>{let e={type:B.MessageType.Warning,message:ReScript tooling: Internal error. Something broke. Here's the error message that you can report if you want:\n \n\nTypeError: s is not iterable\n at Th (/nix/store/smsf3d20n08h6h03b8hix19i6273nc14-rescript-language-server-1.62.0/lib/node_modules/@rescript/language-server/out/cli.js:42:10233)\n at pi.kh [as callback] (/nix/store/smsf3d20n08h6h03b8hix19i6273nc14-rescript-language-server-1.62.0/lib/node_modules/@rescript/language-server/out/cli.js:42:12321)\n at /nix/store/smsf3d20n08h6h03b8hix19i6273nc14-rescript-language-server-1.62.0/lib/node_modules/@rescript/language-server/out/cli.js:3:19579\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n\nNode.js v22.16.0\n"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions