diff --git a/src/FsAutoComplete.Core/FsAutoComplete.Core.fsproj b/src/FsAutoComplete.Core/FsAutoComplete.Core.fsproj
index 81df0fe33..0c8f3994a 100644
--- a/src/FsAutoComplete.Core/FsAutoComplete.Core.fsproj
+++ b/src/FsAutoComplete.Core/FsAutoComplete.Core.fsproj
@@ -50,6 +50,7 @@
+
diff --git a/src/FsAutoComplete.Core/UnionPatternMatchCaseGenerator.fsi b/src/FsAutoComplete.Core/UnionPatternMatchCaseGenerator.fsi
new file mode 100644
index 000000000..152063013
--- /dev/null
+++ b/src/FsAutoComplete.Core/UnionPatternMatchCaseGenerator.fsi
@@ -0,0 +1,36 @@
+/// Original code from VisualFSharpPowerTools project: https://github.com/fsprojects/VisualFSharpPowerTools/blob/master/src/FSharp.Editing/CodeGeneration/UnionPatternMatchCaseGenerator.fs
+module FsAutoComplete.UnionPatternMatchCaseGenerator
+
+open FSharp.Compiler.Syntax
+open FSharp.Compiler.Text
+open FSharp.Compiler.Symbols
+
+[]
+type PatternMatchExpr =
+ {
+ /// Range of 'match x with' or 'function'
+ MatchWithOrFunctionRange: Range
+ /// The whole pattern match expression
+ Expr: SynExpr
+ Clauses: SynMatchClause list
+ }
+
+[]
+type UnionMatchCasesInsertionParams =
+ { InsertionPos: Position
+ IndentColumn: int }
+
+val shouldGenerateUnionPatternMatchCases: patMatchExpr: PatternMatchExpr -> entity: FSharpEntity -> bool
+
+val tryFindUnionDefinitionFromPos:
+ codeGenService: ICodeGenerationService ->
+ pos: Position ->
+ document: Document ->
+ Async<(PatternMatchExpr * FSharpEntity * UnionMatchCasesInsertionParams) option>
+
+val formatMatchExpr:
+ insertionParams: UnionMatchCasesInsertionParams ->
+ caseDefaultValue: string ->
+ patMatchExpr: PatternMatchExpr ->
+ entity: FSharpEntity ->
+ string
diff --git a/src/FsAutoComplete/FsAutoComplete.fsproj b/src/FsAutoComplete/FsAutoComplete.fsproj
index 014cc81c9..fbc7f3054 100644
--- a/src/FsAutoComplete/FsAutoComplete.fsproj
+++ b/src/FsAutoComplete/FsAutoComplete.fsproj
@@ -29,12 +29,14 @@
+
+
diff --git a/src/FsAutoComplete/LspServers/FSharpLspClient.fsi b/src/FsAutoComplete/LspServers/FSharpLspClient.fsi
new file mode 100644
index 000000000..984844d7c
--- /dev/null
+++ b/src/FsAutoComplete/LspServers/FSharpLspClient.fsi
@@ -0,0 +1,50 @@
+namespace FsAutoComplete.Lsp
+
+open Ionide.LanguageServerProtocol
+open Ionide.LanguageServerProtocol.Server
+open Ionide.LanguageServerProtocol.Types
+open FsAutoComplete.LspHelpers
+open System
+open IcedTasks
+
+type FSharpLspClient =
+ new: sendServerNotification: ClientNotificationSender * sendServerRequest: ClientRequestSender -> FSharpLspClient
+ inherit LspClient
+ member ClientCapabilities: ClientCapabilities option with get, set
+ override WindowShowMessage: ShowMessageParams -> Async
+ override WindowShowMessageRequest: ShowMessageRequestParams -> AsyncLspResult
+ override WindowLogMessage: LogMessageParams -> Async
+ override TelemetryEvent: Newtonsoft.Json.Linq.JToken -> Async
+ override ClientRegisterCapability: RegistrationParams -> AsyncLspResult
+ override ClientUnregisterCapability: UnregistrationParams -> AsyncLspResult
+ override WorkspaceWorkspaceFolders: unit -> AsyncLspResult
+ override WorkspaceConfiguration: ConfigurationParams -> AsyncLspResult
+ override WorkspaceApplyEdit: ApplyWorkspaceEditParams -> AsyncLspResult
+ override WorkspaceSemanticTokensRefresh: unit -> Async
+ override TextDocumentPublishDiagnostics: PublishDiagnosticsParams -> Async
+ ///Custom notification for workspace/solution/project loading events
+ member NotifyWorkspace: p: PlainNotification -> Async
+ ///Custom notification for initial workspace peek
+ member NotifyWorkspacePeek: p: PlainNotification -> Async
+ member NotifyCancelledRequest: p: PlainNotification -> Async
+ member NotifyFileParsed: p: PlainNotification -> Async
+ member NotifyDocumentAnalyzed: p: DocumentAnalyzedNotification -> Async
+ member NotifyTestDetected: p: TestDetectedNotification -> Async
+ member CodeLensRefresh: unit -> Async
+ override WorkDoneProgressCreate: ProgressToken -> AsyncLspResult
+ override Progress: ProgressToken * 'Progress -> Async
+
+type ServerProgressReport =
+ new: lspClient: FSharpLspClient * ?token: ProgressToken -> ServerProgressReport
+ member Token: ProgressToken
+ member Begin: title: string * ?cancellable: bool * ?message: string * ?percentage: uint -> CancellableTask
+ member Report: ?cancellable: bool * ?message: string * ?percentage: uint -> CancellableTask
+ member End: ?message: string -> CancellableTask
+ interface IAsyncDisposable
+ interface IDisposable
+
+/// listener for the the events generated from the fsc ActivitySource
+type ProgressListener =
+ new: lspClient: FSharpLspClient * traceNamespace: string array -> ProgressListener
+ interface IDisposable
+ interface IAsyncDisposable
diff --git a/src/FsAutoComplete/Parser.fs b/src/FsAutoComplete/Parser.fs
index c7b0736b5..0ad58284b 100644
--- a/src/FsAutoComplete/Parser.fs
+++ b/src/FsAutoComplete/Parser.fs
@@ -30,24 +30,18 @@ module Parser =
Start: FSharp.Compiler.Text.pos
End: FSharp.Compiler.Text.pos }
- let private setArity arity (o: #Option) =
+ let setArity arity (o: #Option) =
o.Arity <- arity
o
/// set option to expect no arguments (e.g a flag-style argument: `--verbose`)
- let inline private zero x = setArity ArgumentArity.Zero x
+ let inline zero x = setArity ArgumentArity.Zero x
/// set option to expect one argument (e.g a single value: `--foo bar)
- let inline private one x = setArity ArgumentArity.ExactlyOne x
+ let inline one x = setArity ArgumentArity.ExactlyOne x
/// set option to expect multiple arguments
/// (e.g a list of values: `--foo bar baz` or `--foo bar --foo baz` depending on the style)
- let inline private many x = setArity ArgumentArity.OneOrMore x
-
- /// set option to allow multiple arguments per use of the option flag
- /// (e.g. `--foo bar baz` is equivalent to `--foo bar --foo baz`)
- let inline private multipleArgs (x: #Option) =
- x.AllowMultipleArgumentsPerToken <- true
- x
+ let inline many x = setArity ArgumentArity.OneOrMore x
let verboseOption =
Option([| "--verbose"; "-v"; "--debug" |], "Enable verbose logging. This is equivalent to --log-level debug.")
diff --git a/src/FsAutoComplete/Parser.fsi b/src/FsAutoComplete/Parser.fsi
new file mode 100644
index 000000000..8a6d642e3
--- /dev/null
+++ b/src/FsAutoComplete/Parser.fsi
@@ -0,0 +1,6 @@
+namespace FsAutoComplete
+
+open System.CommandLine.Parsing
+
+module Parser =
+ val parser: Parser