diff --git a/Commands/XmlDocCommandService.fs b/Commands/XmlDocCommandService.fs index cca16374d7d..fcf9eeaec39 100644 --- a/Commands/XmlDocCommandService.fs +++ b/Commands/XmlDocCommandService.fs @@ -69,7 +69,7 @@ type internal XmlDocCommandFilter let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None, userOpName) let! sourceText = document.GetTextAsync(CancellationToken.None) let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName) - let xmlDocables = XmlDocParser.GetXmlDocables (sourceText.ToFSharpSourceText(), Some parsedInput) + let xmlDocables = XmlDocParser.GetXmlDocables (sourceText.ToFSharpSourceText(), parsedInput) let xmlDocablesBelowThisLine = // +1 because looking below current line for e.g. a 'member' xmlDocables |> List.filter (fun (XmlDocable(line,_indent,_paramNames)) -> line = curLineNum+1) diff --git a/Common/RoslynHelpers.fs b/Common/RoslynHelpers.fs index 6e3cb4c34b4..7eca0659392 100644 --- a/Common/RoslynHelpers.fs +++ b/Common/RoslynHelpers.fs @@ -142,10 +142,15 @@ module internal RoslynHelpers = // (i.e the same error does not appear twice, where the only difference is the line endings.) let normalizedMessage = error.Message |> FSharpDiagnostic.NormalizeErrorString |> FSharpDiagnostic.NewlineifyErrorString - let id = "FS" + error.ErrorNumber.ToString("0000") + let id = error.ErrorNumberText let emptyString = LocalizableString.op_Implicit("") let description = LocalizableString.op_Implicit(normalizedMessage) - let severity = if error.Severity = FSharpDiagnosticSeverity.Error then DiagnosticSeverity.Error else DiagnosticSeverity.Warning + let severity = + match error.Severity with + | FSharpDiagnosticSeverity.Error -> DiagnosticSeverity.Error + | FSharpDiagnosticSeverity.Warning -> DiagnosticSeverity.Warning + | FSharpDiagnosticSeverity.Info -> DiagnosticSeverity.Info + | FSharpDiagnosticSeverity.Hidden -> DiagnosticSeverity.Hidden let customTags = match error.ErrorNumber with | 1182 -> FSharpDiagnosticCustomTags.Unnecessary diff --git a/Completion/CompletionProvider.fs b/Completion/CompletionProvider.fs index 382c97db4f2..4ae416cc9c2 100644 --- a/Completion/CompletionProvider.fs +++ b/Completion/CompletionProvider.fs @@ -195,10 +195,7 @@ type internal FSharpCompletionProvider if results.Count > 0 && not declarations.IsForType && not declarations.IsError && List.isEmpty partialName.QualifyingIdents then - let completionContext = - parseResults.ParseTree - |> Option.bind (fun parseTree -> - ParsedInput.TryGetCompletionContext(Position.fromZ caretLinePos.Line caretLinePos.Character, parseTree, line)) + let completionContext = ParsedInput.TryGetCompletionContext(Position.fromZ caretLinePos.Line caretLinePos.Character, parseResults.ParseTree, line) match completionContext with | None -> results.AddRange(keywordCompletionItems) diff --git a/LanguageService/FSharpCheckerExtensions.fs b/LanguageService/FSharpCheckerExtensions.fs index b62c9a8e536..e70577b9363 100644 --- a/LanguageService/FSharpCheckerExtensions.fs +++ b/LanguageService/FSharpCheckerExtensions.fs @@ -12,7 +12,7 @@ type FSharpChecker with member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, sourceText: SourceText, userOpName: string) = asyncMaybe { let! fileParseResults = checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName=userOpName) |> liftAsync - return! fileParseResults.ParseTree + return fileParseResults.ParseTree } member checker.ParseAndCheckDocument(filePath: string, textVersionHash: int, sourceText: SourceText, options: FSharpProjectOptions, languageServicePerformanceOptions: LanguageServicePerformanceOptions, userOpName: string) = @@ -40,9 +40,7 @@ type FSharpChecker with let bindParsedInput(results: (FSharpParseFileResults * FSharpCheckFileResults) option) = match results with | Some(parseResults, checkResults) -> - match parseResults.ParseTree with - | Some parsedInput -> Some (parseResults, parsedInput, checkResults) - | None -> None + Some (parseResults, parseResults.ParseTree, checkResults) | None -> None if languageServicePerformanceOptions.AllowStaleCompletionResults then diff --git a/Navigation/NavigateToSearchService.fs b/Navigation/NavigateToSearchService.fs index 346062c925c..0260ebd0c59 100644 --- a/Navigation/NavigateToSearchService.fs +++ b/Navigation/NavigateToSearchService.fs @@ -184,18 +184,17 @@ type internal FSharpNavigateToSearchService NavigateTo.GetNavigableItems parsedInput |> Array.filter (fun i -> kinds.Contains(navigateToItemKindToRoslynKind i.Kind)) - return - match parseResults.ParseTree |> Option.map navItems with - | Some items -> - [| for item in items do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with - | None -> () - | Some sourceSpan -> - let glyph = navigateToItemKindToGlyph item.Kind - let kind = navigateToItemKindToRoslynKind item.Kind - let additionalInfo = containerToString item.Container document.Project - yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo) |] - | None -> [||] + let items = parseResults.ParseTree |> navItems + let navigableItems = + [| for item in items do + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with + | None -> () + | Some sourceSpan -> + let glyph = navigateToItemKindToGlyph item.Kind + let kind = navigateToItemKindToRoslynKind item.Kind + let additionalInfo = containerToString item.Container document.Project + yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo) |] + return navigableItems } let getCachedIndexedNavigableItems(document: Document, parsingOptions: FSharpParsingOptions, kinds: IImmutableSet) =