Browse Source

feat: Allow Name Generator to disable attach to DevTools (#14425)

pull/14430/head
workgroupengineering 2 years ago
committed by GitHub
parent
commit
55432bd8fb
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      packages/Avalonia/Avalonia.props
  2. 14
      packages/Avalonia/AvaloniaRules.Project.xml
  3. 2
      src/tools/Avalonia.Generators/Avalonia.Generators.props
  4. 6
      src/tools/Avalonia.Generators/GeneratorOptions.cs
  5. 2
      src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs
  6. 5
      src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs
  7. 3
      tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs

1
packages/Avalonia/Avalonia.props

@ -8,6 +8,7 @@
<EnableAvaloniaXamlCompilation Condition="'$(EnableAvaloniaXamlCompilation)'==''">true</EnableAvaloniaXamlCompilation> <EnableAvaloniaXamlCompilation Condition="'$(EnableAvaloniaXamlCompilation)'==''">true</EnableAvaloniaXamlCompilation>
<AvaloniaXamlIlVerifyIl Condition="'$(AvaloniaXamlIlVerifyIl)'==''">false</AvaloniaXamlIlVerifyIl> <AvaloniaXamlIlVerifyIl Condition="'$(AvaloniaXamlIlVerifyIl)'==''">false</AvaloniaXamlIlVerifyIl>
<AvaloniaUseCompiledBindingsByDefault Condition="'$(AvaloniaUseCompiledBindingsByDefault)'==''">false</AvaloniaUseCompiledBindingsByDefault> <AvaloniaUseCompiledBindingsByDefault Condition="'$(AvaloniaUseCompiledBindingsByDefault)'==''">false</AvaloniaUseCompiledBindingsByDefault>
<AvaloniaNameGeneratorAttachDevTools Condition="'$(AvaloniaNameGeneratorAttachDevTools)' == ''">true</AvaloniaNameGeneratorAttachDevTools>
</PropertyGroup> </PropertyGroup>
<Import Project="$(MSBuildThisFileDirectory)\AvaloniaBuildTasks.props"/> <Import Project="$(MSBuildThisFileDirectory)\AvaloniaBuildTasks.props"/>
<Import Project="$(MSBuildThisFileDirectory)\Avalonia.Generators.props"/> <Import Project="$(MSBuildThisFileDirectory)\Avalonia.Generators.props"/>

14
packages/Avalonia/AvaloniaRules.Project.xml

@ -50,7 +50,7 @@
<BoolProperty Name="AvaloniaNameGeneratorIsEnabled" <BoolProperty Name="AvaloniaNameGeneratorIsEnabled"
DisplayName="Use Name Generator" DisplayName="Use Name Generator"
Description="Enable/Disable Avalonia Name Source Generator" Description="Enable/Disable Avalonia Name Source Generator"
HelpUrl="https://github.com/AvaloniaUI/Avalonia/blob/master/src/tools/Avalonia.Generators/README.md" HelpUrl="https://github.com/AvaloniaUI/Avalonia/blob/master/src/tools/Avalonia.Generators/README.md#advanced-usage"
Category="NameGenerator" /> Category="NameGenerator" />
<EnumProperty Name="AvaloniaNameGeneratorBehavior" <EnumProperty Name="AvaloniaNameGeneratorBehavior"
@ -67,6 +67,18 @@
</EnumProperty.Metadata> </EnumProperty.Metadata>
</EnumProperty> </EnumProperty>
<BoolProperty Name="AvaloniaNameGeneratorAttachDevTools"
DisplayName="Attach Dev Tools"
Description="Allowed to automatic attach DevTools in Window InitializeComponent method."
Category="NameGenerator">
<BoolProperty.Metadata>
<NameValuePair Name="DependsOn" Value="Avalonia::AvaloniaNameGeneratorBehavior" />
<NameValuePair Name="VisibilityCondition">
<NameValuePair.Value>(has-evaluated-value "Avalonia" "AvaloniaNameGeneratorBehavior" "InitializeComponent")</NameValuePair.Value>
</NameValuePair>
</BoolProperty.Metadata>
</BoolProperty>
<EnumProperty Name="AvaloniaNameGeneratorDefaultFieldModifier" <EnumProperty Name="AvaloniaNameGeneratorDefaultFieldModifier"
DisplayName="Default Class Field/Property Modifier" DisplayName="Default Class Field/Property Modifier"
Description="Defines the access modifiers used for generated members" Description="Defines the access modifiers used for generated members"

2
src/tools/Avalonia.Generators/Avalonia.Generators.props

@ -6,6 +6,7 @@
<AvaloniaNameGeneratorFilterByPath Condition="'$(AvaloniaNameGeneratorFilterByPath)' == ''">*</AvaloniaNameGeneratorFilterByPath> <AvaloniaNameGeneratorFilterByPath Condition="'$(AvaloniaNameGeneratorFilterByPath)' == ''">*</AvaloniaNameGeneratorFilterByPath>
<AvaloniaNameGeneratorFilterByNamespace Condition="'$(AvaloniaNameGeneratorFilterByNamespace)' == ''">*</AvaloniaNameGeneratorFilterByNamespace> <AvaloniaNameGeneratorFilterByNamespace Condition="'$(AvaloniaNameGeneratorFilterByNamespace)' == ''">*</AvaloniaNameGeneratorFilterByNamespace>
<AvaloniaNameGeneratorViewFileNamingStrategy Condition="'$(AvaloniaNameGeneratorViewFileNamingStrategy)' == ''">NamespaceAndClassName</AvaloniaNameGeneratorViewFileNamingStrategy> <AvaloniaNameGeneratorViewFileNamingStrategy Condition="'$(AvaloniaNameGeneratorViewFileNamingStrategy)' == ''">NamespaceAndClassName</AvaloniaNameGeneratorViewFileNamingStrategy>
<AvaloniaNameGeneratorAttachDevTools Condition="'$(AvaloniaNameGeneratorAttachDevTools)' == ''">true</AvaloniaNameGeneratorAttachDevTools>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="SourceItemGroup"/> <CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="SourceItemGroup"/>
@ -15,6 +16,7 @@
<CompilerVisibleProperty Include="AvaloniaNameGeneratorFilterByPath" /> <CompilerVisibleProperty Include="AvaloniaNameGeneratorFilterByPath" />
<CompilerVisibleProperty Include="AvaloniaNameGeneratorFilterByNamespace" /> <CompilerVisibleProperty Include="AvaloniaNameGeneratorFilterByNamespace" />
<CompilerVisibleProperty Include="AvaloniaNameGeneratorViewFileNamingStrategy" /> <CompilerVisibleProperty Include="AvaloniaNameGeneratorViewFileNamingStrategy" />
<CompilerVisibleProperty Include="AvaloniaNameGeneratorAttachDevTools"/>
</ItemGroup> </ItemGroup>
<Target Name="_InjectAdditionalFiles" BeforeTargets="GenerateMSBuildEditorConfigFileShouldRun"> <Target Name="_InjectAdditionalFiles" BeforeTargets="GenerateMSBuildEditorConfigFileShouldRun">
<ItemGroup> <ItemGroup>

6
src/tools/Avalonia.Generators/GeneratorOptions.cs

@ -14,7 +14,7 @@ internal enum BuildProperties
AvaloniaNameGeneratorFilterByPath = 3, AvaloniaNameGeneratorFilterByPath = 3,
AvaloniaNameGeneratorFilterByNamespace = 4, AvaloniaNameGeneratorFilterByNamespace = 4,
AvaloniaNameGeneratorViewFileNamingStrategy = 5, AvaloniaNameGeneratorViewFileNamingStrategy = 5,
AvaloniaNameGeneratorAttachDevTools = 6,
// TODO add other generators properties here. // TODO add other generators properties here.
} }
@ -48,6 +48,10 @@ internal class GeneratorOptions
BuildProperties.AvaloniaNameGeneratorFilterByNamespace, BuildProperties.AvaloniaNameGeneratorFilterByNamespace,
"*"); "*");
public bool AvaloniaNameGeneratorAttachDevTools => GetBoolProperty(
BuildProperties.AvaloniaNameGeneratorAttachDevTools,
true);
private string[] GetStringArrayProperty(BuildProperties name, string defaultValue) private string[] GetStringArrayProperty(BuildProperties name, string defaultValue)
{ {
var key = name.ToString(); var key = name.ToString();

2
src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs

@ -68,7 +68,7 @@ public class AvaloniaNameSourceGenerator : ISourceGenerator
var types = new RoslynTypeSystem((CSharpCompilation)context.Compilation); var types = new RoslynTypeSystem((CSharpCompilation)context.Compilation);
ICodeGenerator generator = options.AvaloniaNameGeneratorBehavior switch { ICodeGenerator generator = options.AvaloniaNameGeneratorBehavior switch {
Behavior.OnlyProperties => new OnlyPropertiesCodeGenerator(), Behavior.OnlyProperties => new OnlyPropertiesCodeGenerator(),
Behavior.InitializeComponent => new InitializeComponentCodeGenerator(types), Behavior.InitializeComponent => new InitializeComponentCodeGenerator(types, options.AvaloniaNameGeneratorAttachDevTools),
_ => throw new ArgumentOutOfRangeException() _ => throw new ArgumentOutOfRangeException()
}; };

5
src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs

@ -19,9 +19,10 @@ internal class InitializeComponentCodeGenerator: ICodeGenerator
= @" /// <param name=""attachDevTools"">Should the dev tools be attached.</param> = @" /// <param name=""attachDevTools"">Should the dev tools be attached.</param>
"; ";
public InitializeComponentCodeGenerator(IXamlTypeSystem types)
public InitializeComponentCodeGenerator(IXamlTypeSystem types, bool avaloniaNameGeneratorAttachDevTools)
{ {
_diagnosticsAreConnected = types.FindAssembly("Avalonia.Diagnostics") != null; _diagnosticsAreConnected = avaloniaNameGeneratorAttachDevTools && types.FindAssembly("Avalonia.Diagnostics") != null;
} }
public string GenerateCode(string className, string nameSpace, IXamlType xamlType, IEnumerable<ResolvedName> names) public string GenerateCode(string className, string nameSpace, IXamlType xamlType, IEnumerable<ResolvedName> names)

3
tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs

@ -3,7 +3,6 @@ using Avalonia.Generators.Common;
using Avalonia.Generators.Compiler; using Avalonia.Generators.Compiler;
using Avalonia.Generators.NameGenerator; using Avalonia.Generators.NameGenerator;
using Avalonia.Generators.Tests.InitializeComponent.GeneratedInitializeComponent; using Avalonia.Generators.Tests.InitializeComponent.GeneratedInitializeComponent;
using Avalonia.Generators.Tests.OnlyProperties.GeneratedCode;
using Avalonia.Generators.Tests.Views; using Avalonia.Generators.Tests.Views;
using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp;
using Xunit; using Xunit;
@ -48,7 +47,7 @@ public class InitializeComponentTests
var nameResolver = new XamlXNameResolver(); var nameResolver = new XamlXNameResolver();
var names = nameResolver.ResolveNames(classInfo.Xaml); var names = nameResolver.ResolveNames(classInfo.Xaml);
var generator = new InitializeComponentCodeGenerator(types); var generator = new InitializeComponentCodeGenerator(types, devToolsMode);
var code = generator var code = generator
.GenerateCode("SampleView", "Sample.App", classInfo.XamlType, names) .GenerateCode("SampleView", "Sample.App", classInfo.XamlType, names)

Loading…
Cancel
Save