Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions src/CSharpLanguageServer/CSharpLanguageServer.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@
<ItemGroup>
<Compile Include="Logging.fs" />
<Compile Include="Util.fs" />
<Compile Include="Conversions.fs" />
<Compile Include="Types.fs" />
<Compile Include="FormatUtil.fs" />
<Compile Include="ProgressReporter.fs" />
<Compile Include="RoslynHelpers.fs" />
<Compile Include="Lsp/ProgressReporter.fs" />
<Compile Include="Roslyn/Conversions.fs" />
<Compile Include="Roslyn/WorkspaceServices.fs" />
<Compile Include="Roslyn/Solution.fs" />
<Compile Include="Roslyn/Document.fs" />
<Compile Include="Roslyn/Symbol.fs" />
<Compile Include="DocumentationUtil.fs" />
<Compile Include="Diagnostics.fs" />
<Compile Include="Lsp/Client.fs" />
Expand Down
6 changes: 3 additions & 3 deletions src/CSharpLanguageServer/Diagnostics.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer.Types
open CSharpLanguageServer.Logging
open CSharpLanguageServer.RoslynHelpers
open CSharpLanguageServer.Roslyn.Solution

module Diagnostics =
let private logger = Logging.getLoggerByName "Diagnostics"
Expand Down Expand Up @@ -58,13 +58,13 @@ module Diagnostics =
let diagnose (settings: ServerSettings) : Async<int> = async {
logger.LogDebug("diagnose: settings={settings}", settings)

initializeMSBuild logger
initializeMSBuild ()

logger.LogDebug("diagnose: loading solution..")

let lspClient = new LspClientStub()
let cwd = string (Directory.GetCurrentDirectory())
let! _sln = loadSolutionOnSolutionPathOrDir lspClient logger None cwd
let! _sln = solutionLoadSolutionWithPathOrOnCwd lspClient None cwd

logger.LogDebug("diagnose: done")

Expand Down
2 changes: 1 addition & 1 deletion src/CSharpLanguageServer/DocumentationUtil.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ open System.Xml.Linq

open Microsoft.CodeAnalysis

open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions

module DocumentationUtil =
type TripleSlashComment =
Expand Down
104 changes: 0 additions & 104 deletions src/CSharpLanguageServer/FormatUtil.fs

This file was deleted.

2 changes: 1 addition & 1 deletion src/CSharpLanguageServer/Handlers/CallHierarchy.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer.State
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions

[<RequireQualifiedAccess>]
module CallHierarchy =
Expand Down
2 changes: 1 addition & 1 deletion src/CSharpLanguageServer/Handlers/CodeAction.fs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ open Ionide.LanguageServerProtocol.JsonRpc
open Microsoft.Extensions.Logging

open CSharpLanguageServer.Logging
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions
open CSharpLanguageServer.State
open CSharpLanguageServer.Util

Expand Down
2 changes: 1 addition & 1 deletion src/CSharpLanguageServer/Handlers/CodeLens.fs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer.State
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions

type private DocumentSymbolCollectorForCodeLens(semanticModel: SemanticModel) =
inherit CSharpSyntaxWalker(SyntaxWalkerDepth.Token)
Expand Down
16 changes: 14 additions & 2 deletions src/CSharpLanguageServer/Handlers/Completion.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer.State
open CSharpLanguageServer.Util
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions
open CSharpLanguageServer.Logging

[<RequireQualifiedAccess>]
Expand Down Expand Up @@ -202,7 +202,19 @@ module Completion =
|> _.WithBool("ShowItemsFromUnimportedNamespaces", false)
|> _.WithBool("ShowNameSuggestions", false)

let completionTrigger = CompletionContext.toCompletionTrigger p.Context
let completionTrigger =
p.Context
|> Option.bind (fun ctx ->
match ctx.TriggerKind with
| CompletionTriggerKind.Invoked
| CompletionTriggerKind.TriggerForIncompleteCompletions ->
Some Microsoft.CodeAnalysis.Completion.CompletionTrigger.Invoke
| CompletionTriggerKind.TriggerCharacter ->
ctx.TriggerCharacter
|> Option.map Seq.head
|> Option.map Microsoft.CodeAnalysis.Completion.CompletionTrigger.CreateInsertionTrigger
| _ -> None)
|> Option.defaultValue Microsoft.CodeAnalysis.Completion.CompletionTrigger.Invoke

let shouldTriggerCompletion =
p.Context
Expand Down
2 changes: 1 addition & 1 deletion src/CSharpLanguageServer/Handlers/Diagnostic.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ open Ionide.LanguageServerProtocol.Server
open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions
open CSharpLanguageServer.State
open CSharpLanguageServer.Types

Expand Down
33 changes: 21 additions & 12 deletions src/CSharpLanguageServer/Handlers/DocumentFormatting.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,30 @@ open Microsoft.CodeAnalysis.Formatting
open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer
open CSharpLanguageServer.State
open CSharpLanguageServer.Util
open CSharpLanguageServer.Roslyn.Document

[<RequireQualifiedAccess>]

module DocumentFormatting =
let provider (clientCapabilities: ClientCapabilities) : U2<bool, DocumentFormattingOptions> option =
Some(U2.C1 true)
let provider (_cc: ClientCapabilities) : U2<bool, DocumentFormattingOptions> option = Some(U2.C1 true)

let handle (context: ServerRequestContext) (p: DocumentFormattingParams) : AsyncLspResult<TextEdit[] option> = async {
match context.GetUserDocument p.TextDocument.Uri with
| None -> return None |> LspResult.success
| Some doc ->
let! ct = Async.CancellationToken
let! options = FormatUtil.getFormattingOptions context.State.Settings doc p.Options
let! newDoc = Formatter.FormatAsync(doc, options, cancellationToken = ct) |> Async.AwaitTask
let! textEdits = FormatUtil.getChanges newDoc doc
return textEdits |> Some |> LspResult.success
let formatDocument lspFormattingOptions doc : Async<TextEdit array option> = async {
let! ct = Async.CancellationToken
let! options = getDocumentFormattingOptionSet doc lspFormattingOptions
let! newDoc = Formatter.FormatAsync(doc, options, cancellationToken = ct) |> Async.AwaitTask
let! textEdits = getDocumentDiffAsLspTextEdits newDoc doc
return textEdits |> Some
}

let handle (context: ServerRequestContext) (p: DocumentFormattingParams) : AsyncLspResult<TextEdit[] option> =
let formatDocument =
p.Options
|> context.State.Settings.GetEffectiveFormattingOptions
|> formatDocument

context.GetUserDocument p.TextDocument.Uri
|> async.Return
|> Async.bindOption formatDocument
|> Async.map LspResult.success
2 changes: 1 addition & 1 deletion src/CSharpLanguageServer/Handlers/DocumentHighlight.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer.State
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions

[<RequireQualifiedAccess>]
module DocumentHighlight =
Expand Down
14 changes: 10 additions & 4 deletions src/CSharpLanguageServer/Handlers/DocumentOnTypeFormatting.fs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ open Microsoft.CodeAnalysis.Formatting
open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer
open CSharpLanguageServer.State
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions
open CSharpLanguageServer.Roslyn.Document

[<RequireQualifiedAccess>]
module DocumentOnTypeFormatting =
Expand Down Expand Up @@ -42,10 +42,16 @@ module DocumentOnTypeFormatting =
| _ -> None

let handle (context: ServerRequestContext) (p: DocumentOnTypeFormattingParams) : AsyncLspResult<TextEdit[] option> = async {
let lspFormattingOptions =
if context.State.Settings.ApplyFormattingOptions then
Some p.Options
else
None

match context.GetUserDocument p.TextDocument.Uri with
| None -> return None |> LspResult.success
| Some doc ->
let! options = FormatUtil.getFormattingOptions context.State.Settings doc p.Options
let! options = getDocumentFormattingOptionSet doc lspFormattingOptions
let! ct = Async.CancellationToken
let! sourceText = doc.GetTextAsync(ct) |> Async.AwaitTask
let pos = Position.toRoslynPosition sourceText.Lines p.Position
Expand All @@ -69,7 +75,7 @@ module DocumentOnTypeFormatting =
)
|> Async.AwaitTask

let! textEdits = FormatUtil.getChanges newDoc doc
let! textEdits = getDocumentDiffAsLspTextEdits newDoc doc
return textEdits |> Some |> LspResult.success
| _ -> return None |> LspResult.success
}
17 changes: 12 additions & 5 deletions src/CSharpLanguageServer/Handlers/DocumentRangeFormatting.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,27 @@ open Microsoft.CodeAnalysis.Text
open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer
open CSharpLanguageServer.State
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions
open CSharpLanguageServer.Roslyn.Document

[<RequireQualifiedAccess>]
module DocumentRangeFormatting =
let provider (_: ClientCapabilities) : U2<bool, DocumentRangeFormattingOptions> option = Some(U2.C1 true)
let provider (_cc: ClientCapabilities) : U2<bool, DocumentRangeFormattingOptions> option = Some(U2.C1 true)

let handle (context: ServerRequestContext) (p: DocumentRangeFormattingParams) : AsyncLspResult<TextEdit[] option> = async {
let lspFormattingOptions =
if context.State.Settings.ApplyFormattingOptions then
Some p.Options
else
None

match context.GetUserDocument p.TextDocument.Uri with
| None -> return None |> LspResult.success
| Some doc ->
let! ct = Async.CancellationToken
let! options = FormatUtil.getFormattingOptions context.State.Settings doc p.Options

let! options = getDocumentFormattingOptionSet doc lspFormattingOptions
let! sourceText = doc.GetTextAsync(ct) |> Async.AwaitTask
let startPos = Position.toRoslynPosition sourceText.Lines p.Range.Start
let endPos = Position.toRoslynPosition sourceText.Lines p.Range.End
Expand All @@ -29,6 +36,6 @@ module DocumentRangeFormatting =
Formatter.FormatAsync(doc, TextSpan.FromBounds(tokenStart, endPos), options, cancellationToken = ct)
|> Async.AwaitTask

let! textEdits = FormatUtil.getChanges newDoc doc
let! textEdits = getDocumentDiffAsLspTextEdits newDoc doc
return textEdits |> Some |> LspResult.success
}
2 changes: 1 addition & 1 deletion src/CSharpLanguageServer/Handlers/DocumentSymbol.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ open Ionide.LanguageServerProtocol.Types
open Ionide.LanguageServerProtocol.JsonRpc

open CSharpLanguageServer.State
open CSharpLanguageServer.Conversions
open CSharpLanguageServer.Roslyn.Conversions
open CSharpLanguageServer.Util

[<RequireQualifiedAccess>]
Expand Down
Loading