提交 f3e952cb 编写于 作者: V Vasily Kirichenko 提交者: Kevin Ransom (msft)

Enable Symplify Name analyzer (#2824)

* enable Symplify name analyzer, fix it on splice operator

* add "Code Fixes" option page with "Simplify Name" checkbox on it

turn on and off SimplifyNameDiagnosticAnalyzer according to settings
上级 3e61e1c9
......@@ -63,4 +63,8 @@ module internal Guids =
[<Literal>]
/// "1e2b3290-4d67-41ff-a876-6f41f868e28f"
let quickInfoOptionPageIdString = "1e2b3290-4d67-41ff-a876-6f41f868e28f"
\ No newline at end of file
let quickInfoOptionPageIdString = "1e2b3290-4d67-41ff-a876-6f41f868e28f"
[<Literal>]
/// "9A66EB6A-DE52-4169-BC26-36FBD4312FD7"
let codeFixesOptionPageIdString = "9A66EB6A-DE52-4169-BC26-36FBD4312FD7"
......@@ -3,7 +3,6 @@
namespace rec Microsoft.VisualStudio.FSharp.Editor
open System
open System.Composition
open System.Collections.Immutable
open System.Threading
open System.Threading.Tasks
......@@ -20,7 +19,7 @@ open Microsoft.VisualStudio.FSharp.LanguageService
type private TextVersionHash = int
// TODO Turn it on when user settings dialog is ready to switch it on and off.
// [<DiagnosticAnalyzer(FSharpCommonConstants.FSharpLanguageName)>]
[<DiagnosticAnalyzer(FSharpConstants.FSharpLanguageName)>]
type internal SimplifyNameDiagnosticAnalyzer() =
inherit DocumentDiagnosticAnalyzer()
......@@ -47,6 +46,7 @@ type internal SimplifyNameDiagnosticAnalyzer() =
override this.AnalyzeSemanticsAsync(document: Document, cancellationToken: CancellationToken) =
asyncMaybe {
do! Option.guard Settings.CodeFixes.SimplifyName
let! options = getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document)
let! textVersion = document.GetTextVersionAsync(cancellationToken)
let textVersionHash = textVersion.GetHashCode()
......@@ -70,7 +70,7 @@ type internal SimplifyNameDiagnosticAnalyzer() =
// so we have to calculate plid's start ourselves.
let plidStartCol = symbolUse.RangeAlternate.EndColumn - name.Length - (getPlidLength plid)
symbolUse, plid, plidStartCol, name)
|> Array.filter (fun (_, plid, _, _) -> not (List.isEmpty plid))
|> Array.filter (fun (_, plid, _, name) -> name <> "" && not (List.isEmpty plid))
|> Array.groupBy (fun (symbolUse, _, plidStartCol, _) -> symbolUse.RangeAlternate.StartLine, plidStartCol)
|> Array.map (fun (_, xs) -> xs |> Array.maxBy (fun (symbolUse, _, _, _) -> symbolUse.RangeAlternate.EndColumn))
......
......@@ -165,4 +165,7 @@
<data name="6009" xml:space="preserve">
<value>QuickInfo</value>
</data>
<data name="6010" xml:space="preserve">
<value>Code Fixes</value>
</data>
</root>
\ No newline at end of file
......@@ -191,7 +191,8 @@ type internal FSharpCheckerWorkspaceServiceFactory
type
[<Guid(FSharpConstants.packageGuidString)>]
[<ProvideLanguageEditorOptionPage(typeof<OptionsUI.IntelliSenseOptionPage>, "F#", null, "IntelliSense", "6008")>]
[<ProvideLanguageEditorOptionPage(typeof<OptionsUI.QuickInfoOptionPage>, "F#", null, "QuickInfo", "6009")>]
[<ProvideLanguageEditorOptionPage(typeof<OptionsUI.QuickInfoOptionPage>, "F#", null, "QuickInfo", "6009")>]
[<ProvideLanguageEditorOptionPage(typeof<OptionsUI.CodeFixesOptionPage>, "F#", null, "Code Fixes", "6010")>]
[<ProvideLanguageService(languageService = typeof<FSharpLanguageService>,
strLanguageName = FSharpConstants.FSharpLanguageName,
languageResourceID = 100,
......
......@@ -22,6 +22,10 @@ type QuickInfoOptions() =
member val DisplayLinks = true with get, set
member val UnderlineStyle = QuickInfoUnderlineStyle.Solid with get, set
[<CLIMutable>]
type CodeFixesOptions =
{ SimplifyName: bool }
[<Export(typeof<ISettings>)>]
type internal Settings [<ImportingConstructor>](store: SettingsStore) =
do // Initialize default settings
......@@ -33,10 +37,14 @@ type internal Settings [<ImportingConstructor>](store: SettingsStore) =
QuickInfoOptions()
|> store.RegisterDefault
{ SimplifyName = true }
|> store.RegisterDefault
interface ISettings
static member IntelliSense : IntelliSenseOptions = getSettings()
static member QuickInfo : QuickInfoOptions = getSettings()
static member CodeFixes : CodeFixesOptions = getSettings()
module internal OptionsUI =
......@@ -59,3 +67,9 @@ module internal OptionsUI =
bindRadioButton view.dash path QuickInfoUnderlineStyle.Dash
bindCheckBox view.displayLinks "DisplayLinks"
upcast view
[<Guid(Guids.codeFixesOptionPageIdString)>]
type internal CodeFixesOptionPage() =
inherit AbstractOptionPage<CodeFixesOptions>()
override this.CreateView() =
upcast CodeFixesOptionControl()
\ No newline at end of file
<UserControl x:Class="Microsoft.VisualStudio.FSharp.UIResources.CodeFixesOptionControl"
x:ClassModifier="internal"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Microsoft.VisualStudio.FSharp.UIResources"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="OptionPageStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<GroupBox Header="{x:Static local:Strings.Code_Fixes}">
<StackPanel>
<CheckBox x:Name="simplifyName" IsChecked="{Binding SimplifyName}"
Content="{x:Static local:Strings.Simplify_name_code_fix}"/>
<StackPanel Margin="15 0 0 0"/>
</StackPanel>
</GroupBox>
</StackPanel>
</ScrollViewer>
</Grid>
</UserControl>
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
{
/// <summary>
/// Interaction logic for CodeFixesOptionControl.xaml
/// </summary>
internal partial class CodeFixesOptionControl : UserControl
{
public CodeFixesOptionControl()
{
InitializeComponent();
}
}
}
......@@ -54,6 +54,9 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="CodeFixesOptionControl.xaml.cs">
<DependentUpon>CodeFixesOptionControl.xaml</DependentUpon>
</Compile>
<Compile Include="IntelliSenseOptionControl.xaml.cs">
<DependentUpon>IntelliSenseOptionControl.xaml</DependentUpon>
</Compile>
......@@ -69,6 +72,10 @@
</Compile>
</ItemGroup>
<ItemGroup>
<Page Include="CodeFixesOptionControl.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="IntelliSenseOptionControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
......
......@@ -60,6 +60,15 @@ public class Strings {
}
}
/// <summary>
/// Looks up a localized string similar to Code Fixes.
/// </summary>
public static string Code_Fixes {
get {
return ResourceManager.GetString("Code_Fixes", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Completion Lists.
/// </summary>
......@@ -123,6 +132,15 @@ public class Strings {
}
}
/// <summary>
/// Looks up a localized string similar to Simplify Name.
/// </summary>
public static string Simplify_name_code_fix {
get {
return ResourceManager.GetString("Simplify_name_code_fix", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to _Solid underline.
/// </summary>
......
......@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Code_Fixes" xml:space="preserve">
<value>Code Fixes</value>
</data>
<data name="Completion_Lists" xml:space="preserve">
<value>Completion Lists</value>
</data>
......@@ -138,6 +141,9 @@
<data name="Show_navigation_links_as" xml:space="preserve">
<value>S_how navigation links as</value>
</data>
<data name="Simplify_name_code_fix" xml:space="preserve">
<value>Simplify Name</value>
</data>
<data name="Solid_underline" xml:space="preserve">
<value>_Solid underline</value>
</data>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册