diff --git a/docs/tooling-features.md b/docs/tooling-features.md index 9cad8549f1ce92fb94e85b9c48dd396821c3a595..81a689e4f550e78ab163438ed19f72fbe9c2b0a4 100644 --- a/docs/tooling-features.md +++ b/docs/tooling-features.md @@ -42,7 +42,6 @@ Most of the syntax operations require an entire document's source text or parse |---------|---------------|---------------|-----------------| | Most code fixes | Current document's typecheck data | Set (1 or more) of suggested text replacements | S-M | | Semantic classification | Current document's typecheck data | Spans of text with semantic classification type for all constructs in a document | S-L | -| Lenses | Current document's typecheck data and top-level declarations (for showing signatures); graph of all projects that reference the current one (for showing references) | Signature data for each top-level construct; spans of text for each reference to a top-level construct with navigation information | S-XL | | Code generation / refactorings | Current document's typecheck data and/or current resolved symbol/symbols | Text replacement(s) | S-L | | Code completion | Current document's typecheck data and currently-resolved symbol user is typing at | List of all symbols in scope that are "completable" based on where completion is invoked | S-L | | Editor tooltips | Current document's typecheck data and resolved symbol where user invoked a tooltip | F# tooltip data based on inspecting a type and its declarations, then pretty-printing them | S-XL | diff --git a/vsintegration/src/FSharp.Editor/Common/Constants.fs b/vsintegration/src/FSharp.Editor/Common/Constants.fs index 3a97a88d5f456384e9f4638520164668ce06697b..7d72967e0e37c69496aa6e1876b5270749d57c0e 100644 --- a/vsintegration/src/FSharp.Editor/Common/Constants.fs +++ b/vsintegration/src/FSharp.Editor/Common/Constants.fs @@ -81,10 +81,6 @@ module internal Guids = /// "9A66EB6A-DE52-4169-BC26-36FBD4312FD7" let codeFixesOptionPageIdString = "9A66EB6A-DE52-4169-BC26-36FBD4312FD7" - [] - /// "00BE7FD9-8145-4A2E-A1BF-3BAF0F4F47DD" - let lensOptionPageIdString = "00BE7FD9-8145-4A2E-A1BF-3BAF0F4F47DD" - [] /// "8FDA964A-263D-4B4E-9560-29897535217C" let languageServicePerformanceOptionPageIdString = "8FDA964A-263D-4B4E-9560-29897535217C" diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index ab04e3f105e8d50a4f20cd0e753c60dfae13e1fd..b0b4cae70e35be711158d302a4c452f5e076838d 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -133,9 +133,6 @@ - - - diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.resx b/vsintegration/src/FSharp.Editor/FSharp.Editor.resx index 45b92f2b2511f43c2db3cc57158aa4694ee648c3..aef0a57ec067f3c904000998eb5eed8d5113f930 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.resx +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.resx @@ -177,9 +177,6 @@ Advanced - - Lens - Formatting diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs index 05dc5f739fb11c89f2662800e7f9adbd49aa325b..1c212ab933b0821a36081591fc8c1d68716c3663 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs @@ -198,7 +198,6 @@ type internal FSharpSettingsFactory [, "F#", null, "Code Fixes", "6010")>] [, "F#", null, "Performance", "6011")>] [, "F#", null, "Advanced", "6012")>] -[, "F#", null, "Lens", "6013")>] [, "F#", null, "Formatting", "6014")>] [] // 64 represents a hex number. It needs to be greater than 37 so the TextMate editor will not be chosen as higher priority. diff --git a/vsintegration/src/FSharp.Editor/Lens/LensDisplayService.fs b/vsintegration/src/FSharp.Editor/Lens/LensDisplayService.fs deleted file mode 100644 index 2e86cc9a0528992da701a7bc68927683ae695d9d..0000000000000000000000000000000000000000 --- a/vsintegration/src/FSharp.Editor/Lens/LensDisplayService.fs +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Windows.Controls -open Microsoft.VisualStudio.FSharp.Editor.Logging -open Microsoft.VisualStudio.Text -open Microsoft.VisualStudio.Text.Editor -open Microsoft.VisualStudio.Text.Formatting -open System.Threading -open System.Windows -open System.Collections.Generic - -type LensDisplayService (view : IWpfTextView, buffer : ITextBuffer) as self = - - // Add buffer changed event handler - do ( - buffer.Changed.Add self.HandleBufferChanged - view.LayoutChanged.Add self.HandleLayoutChanged - ) - - /// - /// Enqueing an unit signals to the tagger that all visible lens must be layouted again, - /// to respect single line changes. - /// - member val RelayoutRequested : Queue<_> = Queue() with get - - member val WpfView = view - - member val TextBuffer = buffer - - /// Saves the ui context to switch context for ui related work. - member val UiContext = SynchronizationContext.Current - - // Tracks the created ui elements per TrackingSpan - member val UiElements = Dictionary<_,Grid>() - - member val TrackingSpanUiParent = HashSet() - - member val UiElementNeighbour = Dictionary() - - /// Caches the current used TrackingSpans per line. One line can contain multiple trackingSpans - member val TrackingSpans = Dictionary>() - - /// Text view for accessing the adornment layer. - member val View: IWpfTextView = view - - member val LensLayer = view.GetAdornmentLayer "Lens" - - /// Tracks the recent first + last visible line numbers for adornment layout logic. - member val RecentFirstVsblLineNmbr = 0 with get, set - - member val RecentLastVsblLineNmbr = 0 with get, set - - /// Tracks the adornments on the layer. - member val AddedAdornments = HashSet() - - /// Cancellation token source for the layout changed event. Needed to abort previous async-work. - member val LayoutChangedCts = new CancellationTokenSource() with get, set - - /// Tracks the last used buffer snapshot, should be preferred used in combination with mutex. - member val CurrentBufferSnapshot = null with get, set - - /// Helper method which returns the start line number of a tracking span - member _.GetTrackingSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = - snapshot.GetLineNumberFromPosition(trackingSpan.GetStartPoint(snapshot).Position) - - /// Helper method which returns the start line number of a tracking span - member _.TryGetTSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = - let pos = trackingSpan.GetStartPoint(snapshot).Position - if snapshot.Length - 1 < pos then None - else pos |> snapshot.GetLineNumberFromPosition |> Some - - member self.UpdateTrackingSpansFast (snapshot:ITextSnapshot) lineNumber = - if lineNumber |> self.TrackingSpans.ContainsKey then - let currentTrackingSpans = self.TrackingSpans.[lineNumber] |> ResizeArray // We need a copy because we modify the list. - for trackingSpan in currentTrackingSpans do - let newLineOption = self.TryGetTSpanStartLine snapshot trackingSpan - match newLineOption with - | None -> () - | Some newLine -> - if newLine <> lineNumber then - // We're on a new line and need to check whether we're currently in another grid - // (because somehow there were multiple trackingSpans per line). - if self.TrackingSpanUiParent.Contains trackingSpan then - self.TrackingSpanUiParent.Remove trackingSpan |> ignore - self.UiElementNeighbour.Remove self.UiElements.[trackingSpan] |> ignore - // remove our entry in the line cache dictionary - self.TrackingSpans.[lineNumber].Remove(trackingSpan) |> ignore - // if the cache entry for the old line is now empty remove it completely - if self.TrackingSpans.[lineNumber].Count = 0 then - self.TrackingSpans.Remove lineNumber |> ignore - // now re-register our tracking span in the cache dict. - // Check whether the new line has no existing entry to add a fresh one. - // If there is already one we put our grid into the grid of the first entry of the line. - if newLine |> self.TrackingSpans.ContainsKey |> not then - self.TrackingSpans.[newLine] <- ResizeArray() - else - let neighbour = - self.UiElements.[self.TrackingSpans.[newLine] |> Seq.last] // This fails if a tracking span has no ui element! - self.UiElementNeighbour.[self.UiElements.[trackingSpan]] <- neighbour - self.TrackingSpanUiParent.Add trackingSpan |> ignore - // And finally add us to the cache again. - self.TrackingSpans.[newLine].Add(trackingSpan) - // Be sure that the uiElement of the trackingSpan is viRecentLastVsblLineNmbr the visible line space. - if newLine < self.RecentFirstVsblLineNmbr || newLine > self.RecentLastVsblLineNmbr then - if self.UiElements.ContainsKey trackingSpan then - let mutable element = self.UiElements.[trackingSpan] - element.Visibility <- Visibility.Hidden - - member _.CreateDefaultStackPanel () = - let grid = Grid(Visibility = Visibility.Hidden) - Canvas.SetLeft(grid, 0.) - Canvas.SetTop(grid, 0.) - grid - - /// Helper methods which invokes every action which is needed for new trackingSpans - member self.AddTrackingSpan (trackingSpan:ITrackingSpan)= - let snapshot = buffer.CurrentSnapshot - let startLineNumber = snapshot.GetLineNumberFromPosition(trackingSpan.GetStartPoint(snapshot).Position) - let uiElement = - if self.UiElements.ContainsKey trackingSpan then -#if DEBUG - logErrorf "Added a tracking span twice, this is not allowed and will result in invalid values! %A" (trackingSpan.GetText snapshot) -#endif - self.UiElements.[trackingSpan] - else - let defaultStackPanel = self.CreateDefaultStackPanel() - self.UiElements.[trackingSpan] <- defaultStackPanel - defaultStackPanel - if self.TrackingSpans.ContainsKey startLineNumber then - self.TrackingSpans.[startLineNumber].Add trackingSpan - let neighbour = - self.UiElements.[self.TrackingSpans.[startLineNumber] |> Seq.last] // This fails if a tracking span has no ui element! - self.UiElementNeighbour.[uiElement] <- neighbour - self.TrackingSpanUiParent.Add trackingSpan |> ignore - else - self.TrackingSpans.[startLineNumber] <- ResizeArray() - self.TrackingSpans.[startLineNumber].Add trackingSpan - uiElement - - - member self.HandleBufferChanged(e:TextContentChangedEventArgs) = - try - let oldSnapshot = e.Before - let snapshot = e.After - self.CurrentBufferSnapshot <- snapshot - for line in oldSnapshot.Lines do - let lineNumber = line.LineNumber - self.UpdateTrackingSpansFast snapshot lineNumber - let firstLine = view.TextViewLines.FirstVisibleLine - view.DisplayTextLineContainingBufferPosition (firstLine.Start, 0., ViewRelativePosition.Top) - self.RelayoutRequested.Enqueue(()) - with e -> -#if DEBUG - logErrorf "Error in lens provider: %A" e -#else - ignore e -#endif - - /// Public non-thread-safe method to add lens for a given tracking span. - /// Returns an UIElement which can be used to add Ui elements and to remove the lens later. - member self.AddLens (trackingSpan:ITrackingSpan) = - if trackingSpan.TextBuffer <> buffer then failwith "TrackingSpan text buffer does not equal with Lens text buffer" - let Grid = self.AddTrackingSpan trackingSpan - self.RelayoutRequested.Enqueue(()) - Grid :> UIElement - - /// Public non-thread-safe method to remove lens for a given tracking span. - member self.RemoveLens (trackingSpan:ITrackingSpan) = - if self.UiElements.ContainsKey trackingSpan then - let Grid = self.UiElements.[trackingSpan] - Grid.Children.Clear() - self.UiElements.Remove trackingSpan |> ignore - try - self.LensLayer.RemoveAdornment(Grid) - with e -> -#if DEBUG - logExceptionWithContext(e, "Removing lens") -#else - ignore e -#endif -#if DEBUG - else - logWarningf "No ui element is attached to this tracking span!" -#endif - let lineNumber = - (trackingSpan.GetStartPoint self.CurrentBufferSnapshot).Position - |> self.CurrentBufferSnapshot.GetLineNumberFromPosition - if self.TrackingSpans.ContainsKey lineNumber then -#if DEBUG - if self.TrackingSpans.[lineNumber].Remove trackingSpan |> not then - logWarningf "No tracking span is accociated with this line number %d!" lineNumber -#endif - if self.TrackingSpans.[lineNumber].Count = 0 then - self.TrackingSpans.Remove lineNumber |> ignore -#if DEBUG - else - logWarningf "No tracking span is accociated with this line number %d!" lineNumber -#endif - - member self.AddUiElementToLens (trackingSpan:ITrackingSpan, uiElement:UIElement) = - let Grid = self.UiElements.[trackingSpan] - Grid.Children.Add uiElement |> ignore - - member self.AddUiElementToLensOnce (trackingSpan:ITrackingSpan, uiElement:UIElement)= - let Grid = self.UiElements.[trackingSpan] - if uiElement |> Grid.Children.Contains |> not then - self.AddUiElementToLens (trackingSpan, uiElement) - - member self.RemoveUiElementFromLens (trackingSpan:ITrackingSpan, uiElement:UIElement) = - let Grid = self.UiElements.[trackingSpan] - Grid.Children.Remove(uiElement) |> ignore - - member self.HandleLayoutChanged (e:TextViewLayoutChangedEventArgs) = - try - // We can cancel existing stuff because the algorithm supports abortion without any data loss - self.LayoutChangedCts.Cancel() - self.LayoutChangedCts.Dispose() - self.LayoutChangedCts <- new CancellationTokenSource() - let buffer = e.NewSnapshot - let recentVisibleLineNumbers = Set [self.RecentFirstVsblLineNmbr .. self.RecentLastVsblLineNmbr] - let firstVisibleLineNumber, lastVisibleLineNumber = - let first, last = - view.TextViewLines.FirstVisibleLine, - view.TextViewLines.LastVisibleLine - buffer.GetLineNumberFromPosition(first.Start.Position), - buffer.GetLineNumberFromPosition(last.Start.Position) - let visibleLineNumbers = Set [firstVisibleLineNumber .. lastVisibleLineNumber] - let nonVisibleLineNumbers = Set.difference recentVisibleLineNumbers visibleLineNumbers - let newVisibleLineNumbers = Set.difference visibleLineNumbers recentVisibleLineNumbers - - let applyFuncOnLineStackPanels (line:IWpfTextViewLine) (func:Grid -> unit) = - let lineNumber = line.Snapshot.GetLineNumberFromPosition(line.Start.Position) - if (self.TrackingSpans.ContainsKey lineNumber) && (self.TrackingSpans.[lineNumber]) |> (Seq.isEmpty >> not) then - for trackingSpan in self.TrackingSpans.[lineNumber] do - let success, ui = self.UiElements.TryGetValue trackingSpan - if success then - func ui - - if nonVisibleLineNumbers.Count > 0 || newVisibleLineNumbers.Count > 0 then - for lineNumber in nonVisibleLineNumbers do - if lineNumber > 0 && lineNumber < buffer.LineCount then - try - let line = - (buffer.GetLineFromLineNumber lineNumber).Start - |> view.GetTextViewLineContainingBufferPosition - applyFuncOnLineStackPanels line (fun ui -> - ui.Visibility <- Visibility.Hidden - ) - with e -> -#if DEBUG - logErrorf "Error in non visible lines iteration %A" e -#else - ignore e -#endif - for lineNumber in newVisibleLineNumbers do - try - let line = - (buffer.GetLineFromLineNumber lineNumber).Start - |> view.GetTextViewLineContainingBufferPosition - applyFuncOnLineStackPanels line (fun ui -> - ui.Visibility <- Visibility.Visible - self.LayoutUIElementOnLine view line ui - ) - with e -> -#if DEBUG - logErrorf "Error in new visible lines iteration %A" e -#else - ignore e -#endif - if not e.VerticalTranslation && e.NewViewState.ViewportHeight <> e.OldViewState.ViewportHeight then - self.RelayoutRequested.Enqueue() // Unfortunately zooming requires a relayout too, to ensure that no weird layout happens due to unkown reasons. - if self.RelayoutRequested.Count > 0 then - self.RelayoutRequested.Dequeue() |> ignore - for lineNumber in visibleLineNumbers do - let line = - (buffer.GetLineFromLineNumber lineNumber).Start - |> view.GetTextViewLineContainingBufferPosition - applyFuncOnLineStackPanels line (fun ui -> - ui.Visibility <- Visibility.Visible - self.LayoutUIElementOnLine view line ui - ) - // Save the new first and last visible lines for tracking - self.RecentFirstVsblLineNmbr <- firstVisibleLineNumber - self.RecentLastVsblLineNmbr <- lastVisibleLineNumber - - self.AsyncCustomLayoutOperation visibleLineNumbers buffer - |> RoslynHelpers.StartAsyncSafe self.LayoutChangedCts.Token "HandleLayoutChanged" - with e -> -#if DEBUG - logExceptionWithContext (e, "Layout changed") -#else - ignore e -#endif - - /// Layouts all stack panels on the line - member self.LayoutUIElementOnLine _ (line:ITextViewLine) (ui:Grid) = - let left, top = - try - let bounds = line.GetCharacterBounds(line.Start) - line.TextRight + 5.0, bounds.Top - 1. - with e -> -#if DEBUG - logExceptionWithContext (e, "Error in layout ui element on line") -#else - ignore e -#endif - Canvas.GetLeft ui, Canvas.GetTop ui - Canvas.SetLeft(ui, left) - Canvas.SetTop(ui, top) - - member self.AsyncCustomLayoutOperation visibleLineNumbers buffer = - asyncMaybe { - // Suspend 5 ms, instantly applying the layout to the adornment elements isn't needed - // and would consume too much performance - do! Async.Sleep(5) |> liftAsync // Skip at least one frames - do! Async.SwitchToContext self.UiContext |> liftAsync - let layer = self.LensLayer - do! Async.Sleep(495) |> liftAsync - try - for visibleLineNumber in visibleLineNumbers do - if self.TrackingSpans.ContainsKey visibleLineNumber then - self.TrackingSpans.[visibleLineNumber] - |> Seq.map (fun trackingSpan -> - let success, res = self.UiElements.TryGetValue trackingSpan - if success then - res - else null - ) - |> Seq.filter (fun ui -> not(isNull ui) && not(self.AddedAdornments.Contains ui)) - |> Seq.iter(fun grid -> - layer.AddAdornment(AdornmentPositioningBehavior.OwnerControlled, Nullable(), - self, grid, AdornmentRemovedCallback(fun _ _ -> self.AddedAdornments.Remove grid |> ignore)) |> ignore - self.AddedAdornments.Add grid |> ignore - let line = - let l = buffer.GetLineFromLineNumber visibleLineNumber - view.GetTextViewLineContainingBufferPosition l.Start - self.LayoutUIElementOnLine view line grid - ) - with e -> -#if DEBUG - logExceptionWithContext (e, "LayoutChanged, processing new visible lines") -#else - ignore e -#endif - } |> Async.Ignore \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Lens/LensProvider.fs b/vsintegration/src/FSharp.Editor/Lens/LensProvider.fs deleted file mode 100644 index 254fe53936494889b063963be34918326e575600..0000000000000000000000000000000000000000 --- a/vsintegration/src/FSharp.Editor/Lens/LensProvider.fs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open Microsoft.VisualStudio.Text -open Microsoft.VisualStudio.Text.Editor -open System.ComponentModel.Composition -open Microsoft.VisualStudio.Utilities -open Microsoft.VisualStudio.Shell -open Microsoft.VisualStudio -open Microsoft.VisualStudio.LanguageServices -open Microsoft.VisualStudio.Text.Tagging -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Shared.Utilities - -[)>] -[)>] -[] -[] -type internal LensProvider - [] - ( - [)>] serviceProvider: IServiceProvider, - textDocumentFactory: ITextDocumentFactoryService, - metadataAsSource: FSharpMetadataAsSourceService, - typeMap : FSharpClassificationTypeMap Lazy, - settings: EditorOptions - ) = - - let tryGetTextDocument (buffer: ITextBuffer) (factory: ITextDocumentFactoryService) = - match factory.TryGetTextDocument buffer with - | true, document -> Some document - | _ -> None - - let lensProviders = ResizeArray() - let componentModel = Package.GetGlobalService(typeof) :?> ComponentModelHost.IComponentModel - let workspace = componentModel.GetService() - - let addLensProvider wpfView buffer = - textDocumentFactory - |> tryGetTextDocument buffer - |> Option.map (fun document -> workspace.CurrentSolution.GetDocumentIdsWithFilePath(document.FilePath)) - |> Option.bind Seq.tryHead - |> Option.map (fun documentId -> - let service = LensService(serviceProvider, workspace, documentId, buffer, metadataAsSource, componentModel.GetService(), typeMap, LensDisplayService(wpfView, buffer), settings) - let provider = (wpfView, service) - wpfView.Closed.Add (fun _ -> lensProviders.Remove provider |> ignore) - lensProviders.Add(provider)) - - [); Name("Lens"); - Order(Before = PredefinedAdornmentLayers.Text); - TextViewRole(PredefinedTextViewRoles.Document)>] - member val LensAdornmentLayerDefinition : AdornmentLayerDefinition = null with get, set - - interface IWpfTextViewCreationListener with - override _.TextViewCreated view = - if settings.Lens.Enabled then - let provider = - lensProviders - |> Seq.tryFind (fun (v, _) -> v = view) - - if provider.IsNone then - addLensProvider view (view.TextBuffer) |> ignore \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Lens/LensService.fs b/vsintegration/src/FSharp.Editor/Lens/LensService.fs deleted file mode 100644 index 2a9724981de59c94a40b4972008bb3c4e0efc47e..0000000000000000000000000000000000000000 --- a/vsintegration/src/FSharp.Editor/Lens/LensService.fs +++ /dev/null @@ -1,403 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - - -open System -open System.Collections.Generic -open System.Threading -open System.Windows -open System.Windows.Controls -open System.Windows.Media -open System.Windows.Media.Animation - -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Classification -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Shared.Extensions - -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text - -open Microsoft.VisualStudio.FSharp.Editor.Logging -open Microsoft.VisualStudio.Shell.Interop -open Microsoft.VisualStudio.Text -open Microsoft.VisualStudio.Text.Classification - -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Shared.Utilities - -type internal Lens(taggedText, computed, funcID, uiElement) = - member val TaggedText: Async<(ResizeArray * FSharpNavigation) option> = taggedText - member val Computed: bool = computed with get, set - member val FuncID: string = funcID - member val UiElement: UIElement = uiElement with get, set - -type internal LensService - ( - serviceProvider: IServiceProvider, - workspace: Workspace, - documentId: DocumentId, - buffer: ITextBuffer, - metadataAsSource: FSharpMetadataAsSourceService, - classificationFormatMapService: IClassificationFormatMapService, - typeMap: Lazy, - lensDisplayService : LensDisplayService, - settings: EditorOptions - ) as self = - - let visit pos parseTree = - SyntaxTraversal.Traverse(pos, parseTree, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = - defaultTraverse(expr) - - override _.VisitInheritSynMemberDefn (_, _, _, _, _, range) = Some range - - override _.VisitTypeAbbrev(_, _, range) = Some range - - override _.VisitLetOrUse(_, _, _, bindings, range) = - match bindings |> Seq.tryFind (fun b -> b.RangeOfHeadPattern.StartLine = pos.Line) with - | Some entry -> - Some entry.RangeOfBindingWithRhs - | None -> - // We choose to use the default range because - // it wasn't possible to find the complete range - // including implementation code. - Some range - - override _.VisitBinding (_, fn, binding) = - Some binding.RangeOfBindingWithRhs - }) - - let formatMap = lazy classificationFormatMapService.GetClassificationFormatMap "tooltip" - - let mutable lastResults = Dictionary() - let mutable firstTimeChecked = false - let mutable bufferChangedCts = new CancellationTokenSource() - let uiContext = SynchronizationContext.Current - - let layoutTagToFormatting (layoutTag: TextTag) = - layoutTag - |> RoslynHelpers.roslynTag - |> FSharpClassificationTags.GetClassificationTypeName - |> typeMap.Value.GetClassificationType - |> formatMap.Value.GetTextProperties - - let createTextBox (lens:Lens) = - async { - do! Async.SwitchToContext uiContext - let! res = lens.TaggedText - match res with - | Some (taggedText, navigation) -> -#if DEBUG - logInfof "Tagged text %A" taggedText -#endif - let textBlock = new TextBlock(Background = Brushes.AliceBlue, Opacity = 0.0, TextTrimming = TextTrimming.None) - FSharpDependencyObjectExtensions.SetDefaultTextProperties(textBlock, formatMap.Value) - - let prefix = Documents.Run settings.Lens.Prefix - prefix.Foreground <- SolidColorBrush(Color.FromRgb(153uy, 153uy, 153uy)) - textBlock.Inlines.Add prefix - - for text in taggedText do - - let coloredProperties = layoutTagToFormatting text.Tag - let actualProperties = - if settings.Lens.UseColors - then - // If color is gray (R=G=B), change to correct gray color. - // Otherwise, use the provided color. - match coloredProperties.ForegroundBrush with - | :? SolidColorBrush as b -> - let c = b.Color - if c.R = c.G && c.R = c.B - then coloredProperties.SetForeground(Color.FromRgb(153uy, 153uy, 153uy)) - else coloredProperties - | _ -> coloredProperties - else - coloredProperties.SetForeground(Color.FromRgb(153uy, 153uy, 153uy)) - - let run = Documents.Run text.Text - FSharpDependencyObjectExtensions.SetTextProperties (run, actualProperties) - - let inl = - match text with - | :? NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> - let h = Documents.Hyperlink(run, ToolTip = nav.Range.FileName) - h.Click.Add (fun _ -> - navigation.NavigateTo(nav.Range, CancellationToken.None)) - h :> Documents.Inline - | _ -> run :> _ - FSharpDependencyObjectExtensions.SetTextProperties (inl, actualProperties) - textBlock.Inlines.Add inl - - - textBlock.Measure(Size(Double.PositiveInfinity, Double.PositiveInfinity)) - lens.Computed <- true - lens.UiElement <- textBlock - return true - | _ -> - return false - } - - let executeLensAsync () = - asyncMaybe { - do! Async.Sleep 800 |> liftAsync -#if DEBUG - logInfof "Rechecking code due to buffer edit!" -#endif - let! document = workspace.CurrentSolution.GetDocument documentId |> Option.ofObj - let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpUseMutationWhenValueIsMutableFixProvider)) |> liftAsync - let parsedInput = parseFileResults.ParseTree -#if DEBUG - logInfof "Getting uses of all symbols!" -#endif - let! ct = Async.CancellationToken |> liftAsync - let symbolUses = checkFileResults.GetAllUsesOfAllSymbolsInFile(ct) - let textSnapshot = buffer.CurrentSnapshot -#if DEBUG - logInfof "Updating due to buffer edit!" -#endif - // Clear existing data and cache flags - // The results which are left. - let oldResults = Dictionary(lastResults) - - let newResults = Dictionary() - // Symbols which cache wasn't found yet - let unattachedSymbols = ResizeArray() - // Tags which are new or need to be updated due to changes. - let tagsToUpdate = Dictionary() - let lensToAdd = ResizeArray() - - let useResults (displayContext: FSharpDisplayContext, func: FSharpMemberOrFunctionOrValue, realPosition: range) = - async { - try - let textSnapshot = buffer.CurrentSnapshot - let lineNumber = Line.toZ func.DeclarationLocation.StartLine - if (lineNumber >= 0 || lineNumber < textSnapshot.LineCount) then - match func.FullTypeSafe with - | Some _ -> - let maybeContext = checkFileResults.GetDisplayContextForPos(func.DeclarationLocation.Start) - - let displayContext = Option.defaultValue displayContext maybeContext - let typeLayout = func.FormatLayout displayContext - let taggedText = ResizeArray() - typeLayout |> Seq.iter taggedText.Add - let statusBar = StatusBar(serviceProvider.GetService()) - let navigation = FSharpNavigation(statusBar, metadataAsSource, document, realPosition) - // Because the data is available notify that this line should be updated, displaying the results - return Some (taggedText, navigation) - | None -> -#if DEBUG - logWarningf "Couldn't acquire Lens data for function %A" func -#endif - return None - else return None - with e -> -#if DEBUG - logErrorf "Error in lazy lens computation. %A" e -#else - ignore e -#endif - return None - } - - let inline setNewResultsAndWarnIfOverriden fullDeclarationText value = -#if DEBUG - if newResults.ContainsKey fullDeclarationText then - logWarningf "New results already contains: %A" fullDeclarationText -#endif - newResults.[fullDeclarationText] <- value - - for symbolUse in symbolUses do - if symbolUse.IsFromDefinition then - match symbolUse.Symbol with - | :? FSharpMemberOrFunctionOrValue as func when func.IsModuleValueOrMember || func.IsProperty -> - let funcID = func.LogicalName + (func.FullType.ToString() |> hash |> string) - // Try to re-use the last results - if lastResults.ContainsKey funcID then - // Make sure that the results are usable - let inline setNewResultsAndWarnIfOverridenLocal value = setNewResultsAndWarnIfOverriden funcID value - let lastTrackingSpan, lens as lastResult = lastResults.[funcID] - if lens.FuncID = funcID then - setNewResultsAndWarnIfOverridenLocal lastResult - oldResults.Remove funcID |> ignore - else - let declarationLine, range = - match visit func.DeclarationLocation.Start parsedInput with - | Some range -> range.StartLine - 1, range - | _ -> func.DeclarationLocation.StartLine - 1, func.DeclarationLocation - // Track the old element for removal - let declarationSpan = - let line = textSnapshot.GetLineFromLineNumber declarationLine - let offset = line.GetText() |> Seq.findIndex (Char.IsWhiteSpace >> not) - SnapshotSpan(line.Start.Add offset, line.End).Span - let newTrackingSpan = - textSnapshot.CreateTrackingSpan(declarationSpan, SpanTrackingMode.EdgeExclusive) - // Push back the new results - let res = - Lens( Async.cache (useResults (symbolUse.DisplayContext, func, range)), - false, - funcID, - null) - // The old results aren't computed at all, because the line might have changed create new results - tagsToUpdate.[lastTrackingSpan] <- (newTrackingSpan, funcID, res) - setNewResultsAndWarnIfOverridenLocal (newTrackingSpan, res) - - oldResults.Remove funcID |> ignore - else - // The symbol might be completely new or has slightly changed. - // We need to track this and iterate over the left entries to ensure that there isn't anything - unattachedSymbols.Add(symbolUse, func, funcID) - | _ -> () - - // In best case this works quite `covfefe` fine because often enough we change only a small part of the file and not the complete. - for unattachedSymbol in unattachedSymbols do - let symbolUse, func, funcID = unattachedSymbol - let declarationLine, range = - match visit func.DeclarationLocation.Start parsedInput with - | Some range -> range.StartLine - 1, range - | _ -> func.DeclarationLocation.StartLine - 1, func.DeclarationLocation - - let test (v:KeyValuePair<_, _>) = - let _, (lens:Lens) = v.Value - lens.FuncID = funcID - match oldResults |> Seq.tryFind test with - | Some res -> - let (trackingSpan : ITrackingSpan), (lens : Lens) = res.Value - let declarationSpan = - let line = textSnapshot.GetLineFromLineNumber declarationLine - let offset = line.GetText() |> Seq.findIndex (Char.IsWhiteSpace >> not) - SnapshotSpan(line.Start.Add offset, line.End).Span - let newTrackingSpan = - textSnapshot.CreateTrackingSpan(declarationSpan, SpanTrackingMode.EdgeExclusive) - if lens.Computed && (isNull lens.UiElement |> not) then - newResults.[funcID] <- (newTrackingSpan, lens) - tagsToUpdate.[trackingSpan] <- (newTrackingSpan, funcID, lens) - else - let res = - Lens( - Async.cache (useResults (symbolUse.DisplayContext, func, range)), - false, - funcID, - null) - // The tag might be still valid but it hasn't been computed yet so create fresh results - tagsToUpdate.[trackingSpan] <- (newTrackingSpan, funcID, res) - newResults.[funcID] <- (newTrackingSpan, res) - let key = res.Key - oldResults.Remove key |> ignore // no need to check this entry again - | None -> - // This function hasn't got any cache and so it's completely new. - // So create completely new results - // And finally add a tag for this. - let res = - Lens( - Async.cache (useResults (symbolUse.DisplayContext, func, range)), - false, - funcID, - null) - try - let declarationSpan = - let line = textSnapshot.GetLineFromLineNumber declarationLine - let offset = line.GetText() |> Seq.findIndex (Char.IsWhiteSpace >> not) - SnapshotSpan(line.Start.Add offset, line.End).Span - let trackingSpan = - textSnapshot.CreateTrackingSpan(declarationSpan, SpanTrackingMode.EdgeExclusive) - lensToAdd.Add (trackingSpan, res) - newResults.[funcID] <- (trackingSpan, res) - with e -> -#if DEBUG - logExceptionWithContext (e, "Lens tracking tag span creation") -#endif - ignore e - () - lastResults <- newResults - do! Async.SwitchToContext uiContext |> liftAsync - let createLensUIElement (lens:Lens) trackingSpan _ = - if lens.Computed |> not then - async { - let! res = createTextBox lens - if res then - do! Async.SwitchToContext uiContext -#if DEBUG - logInfof "Adding ui element for %A" (lens.TaggedText) -#endif - let uiElement = lens.UiElement - let animation = - DoubleAnimation( - To = Nullable 0.8, - Duration = (TimeSpan.FromMilliseconds 800. |> Duration.op_Implicit), - EasingFunction = QuadraticEase() - ) - let sb = Storyboard() - Storyboard.SetTarget(sb, uiElement) - Storyboard.SetTargetProperty(sb, PropertyPath Control.OpacityProperty) - sb.Children.Add animation - lensDisplayService.AddUiElementToLensOnce (trackingSpan, uiElement) - lensDisplayService.RelayoutRequested.Enqueue () - sb.Begin() - else -#if DEBUG - logWarningf "Couldn't retrieve lens information for %A" lens.FuncID -#endif - () - } |> (RoslynHelpers.StartAsyncSafe CancellationToken.None) "UIElement creation" - - for value in tagsToUpdate do - let trackingSpan, (newTrackingSpan, _, lens) = value.Key, value.Value - lensDisplayService.RemoveLens trackingSpan |> ignore - let Grid = lensDisplayService.AddLens newTrackingSpan - if lens.Computed && (isNull lens.UiElement |> not) then - let uiElement = lens.UiElement - lensDisplayService.AddUiElementToLensOnce (newTrackingSpan, uiElement) - else - Grid.IsVisibleChanged - |> Event.filter (fun eventArgs -> eventArgs.NewValue :?> bool) - |> Event.add (createLensUIElement lens newTrackingSpan) - - for value in lensToAdd do - let trackingSpan, lens = value - let Grid = lensDisplayService.AddLens trackingSpan -#if DEBUG - logInfof "Trackingspan %A is being added." trackingSpan -#endif - - Grid.IsVisibleChanged - |> Event.filter (fun eventArgs -> eventArgs.NewValue :?> bool) - |> Event.add (createLensUIElement lens trackingSpan) - - for oldResult in oldResults do - let trackingSpan, _ = oldResult.Value - lensDisplayService.RemoveLens trackingSpan |> ignore -#if DEBUG - logInfof "Finished updating lens." -#endif - - if not firstTimeChecked then - firstTimeChecked <- true - } |> Async.Ignore - - do - begin - buffer.Changed.AddHandler(fun _ e -> (self.BufferChanged e)) - async { - let mutable numberOfFails = 0 - while not firstTimeChecked && numberOfFails < 10 do - try - do! executeLensAsync() - do! Async.Sleep(1000) - with - | e -> -#if DEBUG - logErrorf "Lens startup failed with: %A" e -#else - ignore e -#endif - numberOfFails <- numberOfFails + 1 - } |> Async.Start - end - - member _.BufferChanged ___ = - bufferChangedCts.Cancel() // Stop all ongoing async workflow. - bufferChangedCts.Dispose() - bufferChangedCts <- new CancellationTokenSource() - executeLensAsync () |> Async.Ignore |> RoslynHelpers.StartAsyncSafe bufferChangedCts.Token "Buffer Changed" diff --git a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs index 4ee2d1427374123be6a993c277af04445cc12e87..9e51ec9fb084ecc53a8b9640aaafb4a61a404496 100644 --- a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs +++ b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs @@ -72,16 +72,6 @@ type LanguageServicePerformanceOptions = EnableParallelCheckingWithSignatureFiles = false EnableParallelReferenceResolution = false } -[] -type LensOptions = - { Enabled : bool - UseColors: bool - Prefix : string } - static member Default = - { Enabled = false - UseColors = false - Prefix = "// " } - [] type AdvancedOptions = { IsBlockStructureEnabled: bool @@ -116,7 +106,6 @@ type EditorOptions store.Register LanguageServicePerformanceOptions.Default store.Register AdvancedOptions.Default store.Register IntelliSenseOptions.Default - store.Register LensOptions.Default store.Register FormattingOptions.Default member _.IntelliSense : IntelliSenseOptions = store.Get() @@ -124,7 +113,6 @@ type EditorOptions member _.CodeFixes : CodeFixesOptions = store.Get() member _.LanguageServicePerformance : LanguageServicePerformanceOptions = store.Get() member _.Advanced: AdvancedOptions = store.Get() - member _.Lens: LensOptions = store.Get() member _.Formatting : FormattingOptions = store.Get() interface Microsoft.CodeAnalysis.Host.IWorkspaceService @@ -175,12 +163,6 @@ module internal OptionsUI = override this.CreateView() = upcast LanguageServicePerformanceOptionControl() - [] - type internal LensOptionPage() = - inherit AbstractOptionPage() - override this.CreateView() = - upcast LensOptionControl() - [] type internal AdvancedSettingsOptionPage() = inherit AbstractOptionPage() diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf index 9bb3fc5afcafb90a5e91074300e65658f82c61c2..4db3fac1a02db23f0658ad67e24013cfea33ac53 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf @@ -242,11 +242,6 @@ Upřesnit - - Lens - Lens - - Formatting Formátování diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf index 78390902d29bb0a116e8258b2574d4796451548d..9b2e783f971b4989538d454c9f9876bd7f2a53d7 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf @@ -242,11 +242,6 @@ Erweitert - - Lens - Lens - - Formatting Formatierung diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf index cf4755d3bd9b5c5cc2941f216f2e3d7ad396669f..a9aea46564791073c090f09fe55d36531dca752c 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf @@ -242,11 +242,6 @@ Opciones avanzadas - - Lens - Lens - - Formatting Formato diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf index 2d217aba6b7553543aec2d20bcfa2b9d02a43bd9..59d3d4e7177d811dfb6e9545fcb49aaa8140066a 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf @@ -242,11 +242,6 @@ Avancé - - Lens - Lens - - Formatting Mise en forme diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf index 0a8c84d563e9d1b7ec4cba3f62553f2d0ee30675..a915c0dbb099f28fd50437061eed5fa5ef2d5e81 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf @@ -242,11 +242,6 @@ Avanzate - - Lens - Lens - - Formatting Formattazione diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf index a42c056b86d78c6ac382456ab7ff00a685aa2b78..6f719cbc4193853f9557e26758c380ee8f8cf0a9 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf @@ -242,11 +242,6 @@ 詳細 - - Lens - Lens - - Formatting 書式設定 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf index 6dfde115cc9f9c15d4c67bfea9cb1e5f43818e6e..df9e6f4b81a9c772ed7dc3fe8d2ce66f37612600 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf @@ -242,11 +242,6 @@ 고급 - - Lens - Lens - - Formatting 서식 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf index 8d64b02e36932f8cab718440bdec17012e38562d..ed9c8cc28226a173c56edf951c4312246bdfefba 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf @@ -242,11 +242,6 @@ Zaawansowane - - Lens - Lens - - Formatting Formatowanie diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf index 1a5a76b6f9ccc94422189e37bdccc5bc4cf0291c..7433eb35d820ef5a4cd9396f1072ebb8a1d7dc09 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf @@ -242,11 +242,6 @@ Avançado - - Lens - Lens - - Formatting Formatação diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf index 7192ce2bbd64fd2c7aa978079c713fdbcd2a1966..008fe677208cff63f9034098589874fbb7f663b2 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf @@ -242,11 +242,6 @@ Дополнительный - - Lens - Lens - - Formatting Форматирование diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf index d6ac70f0d35efa4122dfc27b82881d11d83ac658..7c46293045386da5bf5c4b30491495d82f72f912 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf @@ -242,11 +242,6 @@ Gelişmiş - - Lens - Lens - - Formatting Biçimlendirme diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf index 8edc31ae9802afa28dc0b2e4304a99c863fb359b..93790c1fa8fba76b1f909c0cd5d104660c23c87b 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf @@ -242,11 +242,6 @@ 高级 - - Lens - Lens - - Formatting 正在格式化 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf index 568d86c92a15fb766deea7f52d07eca5825ae5bf..9b05a5873a4a4dec102cdb8263154b880e2187ba 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf @@ -242,11 +242,6 @@ 進階 - - Lens - Lens - - Formatting 格式化 diff --git a/vsintegration/src/FSharp.UIResources/LensOptionControl.xaml b/vsintegration/src/FSharp.UIResources/LensOptionControl.xaml deleted file mode 100644 index 8d5b2d6e19998ef492d7a2a7048af52733ada9cd..0000000000000000000000000000000000000000 --- a/vsintegration/src/FSharp.UIResources/LensOptionControl.xaml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/src/FSharp.UIResources/LensOptionControl.xaml.cs b/vsintegration/src/FSharp.UIResources/LensOptionControl.xaml.cs deleted file mode 100644 index 5ae19bbb75fecda1cb5f0c3201c54b62b47c8919..0000000000000000000000000000000000000000 --- a/vsintegration/src/FSharp.UIResources/LensOptionControl.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace Microsoft.VisualStudio.FSharp.UIResources -{ - /// - /// Interaction logic for LensOptionPage.xaml - /// - internal partial class LensOptionControl : UserControl - { - public LensOptionControl() - { - InitializeComponent(); - } - } -} diff --git a/vsintegration/src/FSharp.UIResources/Strings.Designer.cs b/vsintegration/src/FSharp.UIResources/Strings.Designer.cs index c2c44bfb4a77b9f9398bf5ee31e73ea06b521947..dad1be8b3465234678e106b97d8483c5601b05cb 100644 --- a/vsintegration/src/FSharp.UIResources/Strings.Designer.cs +++ b/vsintegration/src/FSharp.UIResources/Strings.Designer.cs @@ -231,42 +231,6 @@ public class Strings { } } - /// - /// Looks up a localized string similar to Lens. - /// - public static string Lens { - get { - return ResourceManager.GetString("Lens", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Annotation prefix. - /// - public static string Lens_Prefix { - get { - return ResourceManager.GetString("Lens_Prefix", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enable Lens (Experimental). - /// - public static string Lens_Switch { - get { - return ResourceManager.GetString("Lens_Switch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use colors in annotations. - /// - public static string Lens_UseColors { - get { - return ResourceManager.GetString("Lens_UseColors", resourceCulture); - } - } - /// /// Looks up a localized string similar to Navigation links. /// diff --git a/vsintegration/src/FSharp.UIResources/Strings.resx b/vsintegration/src/FSharp.UIResources/Strings.resx index f87b2edd988acab6f848a9513c234bb6cb6b9dc9..d48c95267028e00868965d62433c8ff772d474f6 100644 --- a/vsintegration/src/FSharp.UIResources/Strings.resx +++ b/vsintegration/src/FSharp.UIResources/Strings.resx @@ -120,18 +120,6 @@ Always place open statements at the top level - - Lens - - - Enable Lens (Experimental) - - - Annotation prefix - - - Use colors in annotations - Code Fixes diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf index d50c7ea6d1c7e39367f101e43ae196f76a301c21..14a5be50a2be0f18f21de0d499151378694bfdc8 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Povolit funkci Lens (experimentální) - - - - Annotation prefix - Předpona poznámky - - - - Use colors in annotations - Použít barvy v poznámkách - - Code Fixes Opravy kódu diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf index d4d347fbc8170ca5651fd90117b228acac3df45f..c54b295310150488667937a4f60d90e80e3aa88d 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Lens aktivieren (experimentell) - - - - Annotation prefix - Anmerkungspräfix - - - - Use colors in annotations - Farben in Anmerkungen verwenden - - Code Fixes Codefehlerbehebungen diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf index 2591eae9f361d1861252dabf45e8d60128fd37fe..a36a5e67414cd9108a6dc765d6788f753e2ee690 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Habilitar Lens (experimental) - - - - Annotation prefix - Prefijo de anotación - - - - Use colors in annotations - Usar colores en anotaciones - - Code Fixes Correcciones de código diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf index 8f7821d9aeb8c5d62a11c0012ea177ac86a6fe5b..6f4222e5d34e254092aa1335a5ec2e047a151902 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Activer Lens (expérimental) - - - - Annotation prefix - Préfixe d'annotation - - - - Use colors in annotations - Utiliser des couleurs dans les annotations - - Code Fixes Correctifs du code diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf index 447da25a46738b892e3904fa7a734fd67867e7c0..6506e23873ebdb47340a845084b911eb9543231a 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Abilita Lens (sperimentale) - - - - Annotation prefix - Prefisso annotazione - - - - Use colors in annotations - Usa colori nelle annotazioni - - Code Fixes Correzioni del codice diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf index a2f3594e5482179b0990abfb7dc497325fd473a7..2bb8b5643d3e57da6f56a8f1e62d87b32220b2a1 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Lens を有効にする (試験段階) - - - - Annotation prefix - 注釈のプレフィックス - - - - Use colors in annotations - 注釈でカラーを使用する - - Code Fixes コード修正 diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf index e03949a0ba53b4666df45389edff2dc94e6a9b14..feae9fa0368b43b5c5cbf605fa8e766ee21dd80a 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Lens 사용(실험적) - - - - Annotation prefix - 주석 접두사 - - - - Use colors in annotations - 주석에서 색 사용 - - Code Fixes 코드 수정 사항 diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf index 71e9dbf228b2141e6c4fd1ac3e72bc4823a4a638..9e1bb90b30e745067156a26acef9937df03ba2e8 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Włącz funkcję Lens (eksperymentalna) - - - - Annotation prefix - Prefiks adnotacji - - - - Use colors in annotations - Stosuj kolory w adnotacjach - - Code Fixes Poprawki kodu diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf index 96ec77b97f2a3460d29787133e83e980f151fb50..32ed3a2e34b6da405ffa7d1a3db56d0f245e2a83 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Habilitar Lens (Experimental) - - - - Annotation prefix - Prefixo da anotação - - - - Use colors in annotations - Usar cores em anotações - - Code Fixes Correções de Código diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf index 7e45d8e8d23a770a784f7bbc0277b8a369e48db9..459db8c25f245739040ca7fa41c815414d65b22b 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Включить Lens (экспериментальная функция) - - - - Annotation prefix - Префикс примечания - - - - Use colors in annotations - Использовать цветные примечания - - Code Fixes Исправления кода diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf index c05d626e70ad04180a8c6fe1f14376b370dbef8c..47a2bcd6e033494ad35a65b9fbea8127a5788a4f 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - Lens’i Etkinleştir (Deneysel) - - - - Annotation prefix - Ek açıklama ön eki - - - - Use colors in annotations - Ek açıklamalarda renk kullan - - Code Fixes Kod Düzeltmeleri diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf index abe99a445cd589e488750f0bdfb53f5b04121d98..5c03fc08051e3777b51cd155496e5e55b2841e06 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - 启用 Lens (试验) - - - - Annotation prefix - 批注前缀 - - - - Use colors in annotations - 在批注中使用颜色 - - Code Fixes 代码修补程序 diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf index 4e5a0bacc5ad3df8c3bff5a549c11b4ff3767792..008f0ac19952720517bfb369efc48e0e7ec1da35 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf @@ -12,26 +12,6 @@ Inline Hints - - Lens - Lens - - - - Enable Lens (Experimental) - 啟用 Lens (實驗性) - - - - Annotation prefix - 註釋前置詞 - - - - Use colors in annotations - 在註釋中使用色彩 - - Code Fixes 程式碼修正