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