diff --git a/package.json b/package.json index 62f1594..84b8fa2 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Yatao Li", "license": "MIT", "icon": "Icon512.png", - "version": "0.1.58", + "version": "0.1.59", "publisher": "yatli", "repository": { "type": "git", diff --git a/src/FSharpLanguageServer/Program.fs b/src/FSharpLanguageServer/Program.fs index a8710ea..886b6c1 100644 --- a/src/FSharpLanguageServer/Program.fs +++ b/src/FSharpLanguageServer/Program.fs @@ -572,6 +572,7 @@ type Server(client: ILanguageClient) = completionProvider = Some({resolveProvider=true; triggerCharacters=['.']}) signatureHelpProvider = Some({triggerCharacters=['('; ',']}) documentSymbolProvider = true + codeActionProvider = true codeLensProvider = Some({resolveProvider=true}) workspaceSymbolProvider = true definitionProvider = true @@ -809,8 +810,55 @@ type Server(client: ILanguageClient) = dprintfn "Error parsing %s: %s" sourceFile.Name e.Message return List.ofSeq(all) } - member this.CodeActions(p: CodeActionParams): Async = TODO() - member this.CodeLens(p: CodeLensParams): Async> = + member this.CodeActions(p: CodeActionParams): Async = + // TODO match: [fsharp 39: typecheck] [E] The value, namespace, type or module 'Thread' is not defined. + // then: 1. search a reflection-based cache for a matching entry. if found, suggest opening a module/namespace + // 2. search for nuget packages + // 3. search for workspace symbol. if found, suggest opening a module/namespace + // TODO match: [fsharp] [H] Unused declaration + // then: 1. offer refactoring to _ + // 2. offer refactoring to __ + // TODO match: [fsharp 39: typecheck] [E] The value or constructor 'fancy' is not defined. + // then: 1. offer create binding + // 2. offer create class + // TODO match: [fsharp 39: typecheck] [E] The field, constructor or member 'Gah' is not defined. + // then: 1. offer create field + // 2. offer create member + // TODO match: [fsharp 366: typecheck] [E] No implementation was given for 'IDisposable.Dispose() : unit'. + // Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'. + // then: 1. offer implement interface + // TODO match: [fsharp 855: typecheck] [E] No abstract or interface member was found that corresponds to this override + // then: 1. offer adding it to the interface + async { + let dbg = sprintf "codeactions: %s %A %A" p.textDocument.uri.LocalPath p.range p.context.diagnostics + return [ { title = dbg; command = p.ToString(); arguments = [] } ] + } + +(* + async { + let file = FileInfo(p.textDocument.uri.LocalPath) + match! checkOpenFile(file, true, false) with + | Error(errors) -> + dprintfn "Check failed, ignored %d errors" (List.length(errors)) + return [] + | Ok(parseResult, checkResult) -> + dprintfn "Code action over %s" <| p.ToString() + + dprintfn "parseResult errors: %A" parseResult.Errors + dprintfn "checkResult errors: %A" checkResult.Errors + + let errors = + Array.append parseResult.Errors checkResult.Errors + |> Array.filter (fun e -> FileInfo(e.FileName).FullName = file.FullName) + |> Array.filter (fun e -> e.StartLineAlternate + + for e in errors do + Uri(e.FileName) = p.textDocument.uri + + return [] + } +*) + member this.CodeLens(p: CodeLensParams): Async = async { let file = FileInfo(p.textDocument.uri.LocalPath) match projects.FindProjectOptions(file), getOrRead(file) with diff --git a/update.ps1 b/update.ps1 index 014cc8b..c8b83cd 100644 --- a/update.ps1 +++ b/update.ps1 @@ -1,4 +1,4 @@ dotnet build -c Release -Copy-Item -Force .\src\FSharpLanguageServer\bin\Release\netcoreapp2.2\*.dll ~\AppData\Local\coc\extensions\node_modules\coc-fsharp\out\server\win10-x64\ -Copy-Item -Force .\src\FSharpLanguageServer\bin\Release\netcoreapp2.2\*.json ~\AppData\Local\coc\extensions\node_modules\coc-fsharp\out\server\win10-x64\ +Copy-Item -Force .\src\FSharpLanguageServer\bin\Release\netcoreapp2.2\*.dll ~\AppData\Local\coc\extensions\node_modules\coc-fsharp\out\server\ +Copy-Item -Force .\src\FSharpLanguageServer\bin\Release\netcoreapp2.2\*.json ~\AppData\Local\coc\extensions\node_modules\coc-fsharp\out\server\ Copy-Item -Force .\package.json ~\AppData\Local\coc\extensions\node_modules\coc-fsharp\package.json diff --git a/update.sh b/update.sh index 465fb04..a0b938c 100755 --- a/update.sh +++ b/update.sh @@ -1,6 +1,4 @@ dotnet build -c Release -cp ./src/FSharpLanguageServer/bin/Release/netcoreapp2.2/*.dll ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/linux-x64/ -cp ./src/FSharpLanguageServer/bin/Release/netcoreapp2.2/*.dll ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/osx.10.11-x64/ -cp ./src/FSharpLanguageServer/bin/Release/netcoreapp2.2/*.json ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/linux-x64/ -cp ./src/FSharpLanguageServer/bin/Release/netcoreapp2.2/*.json ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/osx.10.11-x64/ +cp ./src/FSharpLanguageServer/bin/Release/netcoreapp2.2/*.dll ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/ +cp ./src/FSharpLanguageServer/bin/Release/netcoreapp2.2/*.json ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/ cp ./package.json ~/.config/coc/extensions/node_modules/coc-fsharp/package.json diff --git a/update_2.2.sh b/update_2.2.sh index 675d40f..dfe2e5e 100755 --- a/update_2.2.sh +++ b/update_2.2.sh @@ -7,4 +7,4 @@ do -r $i src/FSharpLanguageServer -o ./out/server/$i done -cp -r ./src/FSharpLanguageServer/out/server/linux-x64/* ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/linux-x64/ +cp -r ./src/FSharpLanguageServer/out/server/linux-x64/* ~/.config/coc/extensions/node_modules/coc-fsharp/out/server/