From 97e00cba956ba951290166e5ccd6ac0e8c2ea188 Mon Sep 17 00:00:00 2001 From: "Artyom V. Gorchakov" Date: Mon, 1 Mar 2021 00:44:02 +0300 Subject: [PATCH] fix: Fix and Turn On InitializeComponent Behavior by Default (#41) * Add using:Avalonia, use InitializeComponent behavior by default * build(deps): bump Microsoft.NET.Test.Sdk from 16.8.3 to 16.9.1 in /src Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.8.3 to 16.9.1. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/compare/v16.8.3...v16.9.1) Signed-off-by: dependabot[bot] * docs: Update the documentation * fix: Update Generator.props * housekeeping: Update version.json Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- README.md | 54 ++++++++++--------- .../Views/SignUpView.xaml.cs | 4 +- .../Avalonia.NameGenerator.Tests.csproj | 2 +- .../AttachedProps.txt | 1 + .../AttachedPropsWithDevTools.txt | 1 + .../ControlWithoutWindow.txt | 1 + .../CustomControls.txt | 1 + .../DataTemplates.txt | 1 + .../FieldModifier.txt | 1 + .../NamedControl.txt | 1 + .../NamedControls.txt | 1 + .../NoNamedControls.txt | 1 + .../SignUpView.txt | 1 + .../xNamedControl.txt | 1 + .../xNamedControls.txt | 1 + src/Avalonia.NameGenerator/Generator.props | 2 +- .../InitializeComponentCodeGenerator.cs | 9 ++-- .../GeneratorOptions.cs | 5 +- version.json | 2 +- 19 files changed, 52 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index f49b35b102..df90e13826 100644 --- a/README.md +++ b/README.md @@ -85,19 +85,23 @@ The `x:Name` generator can be configured via MsBuild properties that you can put - `AvaloniaNameGeneratorBehavior` Possible values: `OnlyProperties`, `InitializeComponent` + Default value: `InitializeComponent` Determines if the generator should generate get-only properties, or the `InitializeComponent` method. - `AvaloniaNameGeneratorDefaultFieldModifier` Possible values: `internal`, `public`, `private`, `protected` + Default value: `internal` The default field modifier that should be used when there is no `x:FieldModifier` directive specified. - `AvaloniaNameGeneratorFilterByPath` Posssible format: `glob_pattern`, `glob_pattern;glob_pattern` + Default value: `*` The generator will process only XAML files with paths matching the specified glob pattern(s). Example: `*/Views/*View.xaml`, `*View.axaml;*Control.axaml` - `AvaloniaNameGeneratorFilterByNamespace` Posssible format: `glob_pattern`, `glob_pattern;glob_pattern` + Default value: `*` The generator will process only XAML files with base classes' namespaces matching the specified glob pattern(s). Example: `MyApp.Presentation.*`, `MyApp.Presentation.Views;MyApp.Presentation.Controls` @@ -106,7 +110,7 @@ The default values are given by: ```xml - OnlyProperties + InitializeComponent internal * * @@ -119,30 +123,7 @@ The default values are given by: ### What do the generated sources look like? -For [`SignUpView`](https://github.com/avaloniaui/Avalonia.NameGenerator/blob/main/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml), we get the following generated output when the source generator is in the `OnlyProperties` mode: - -```cs -// - -using Avalonia.Controls; - -namespace Avalonia.NameGenerator.Sandbox.Views -{ - partial class SignUpView - { - internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindControl("UserNameTextBox"); - public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindControl("UserNameValidation"); - private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindControl("PasswordTextBox"); - internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindControl("PasswordValidation"); - internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindControl("ConfirmPasswordTextBox"); - internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindControl("ConfirmPasswordValidation"); - internal global::Avalonia.Controls.Button SignUpButton => this.FindControl("SignUpButton"); - internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindControl("CompoundValidation"); - } -} -``` - -If you enable the `InitializeComponent` source generator mode, you get: +For [`SignUpView`](https://github.com/avaloniaui/Avalonia.NameGenerator/blob/main/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml), we get the following generated output when the source generator is in the `InitializeComponent` mode: ```cs // @@ -192,3 +173,26 @@ namespace Sample.App } } ``` + +If you enable the `OnlyProperties` source generator mode, you get: + +```cs +// + +using Avalonia.Controls; + +namespace Avalonia.NameGenerator.Sandbox.Views +{ + partial class SignUpView + { + internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindControl("UserNameTextBox"); + public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindControl("UserNameValidation"); + private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindControl("PasswordTextBox"); + internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindControl("PasswordValidation"); + internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindControl("ConfirmPasswordTextBox"); + internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindControl("ConfirmPasswordValidation"); + internal global::Avalonia.Controls.Button SignUpButton => this.FindControl("SignUpButton"); + internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindControl("CompoundValidation"); + } +} +``` diff --git a/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml.cs b/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml.cs index 2538b0a18f..182737faaa 100644 --- a/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml.cs +++ b/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml.cs @@ -1,5 +1,4 @@ using Avalonia.Controls; -using Avalonia.Markup.Xaml; namespace Avalonia.NameGenerator.Sandbox.Views { @@ -14,8 +13,7 @@ namespace Avalonia.NameGenerator.Sandbox.Views { public SignUpView() { - AvaloniaXamlLoader.Load(this); - + InitializeComponent(); UserNameTextBox.Text = "Joseph!"; UserNameValidation.Text = "User name is valid."; PasswordTextBox.Text = "qwerty"; diff --git a/src/Avalonia.NameGenerator.Tests/Avalonia.NameGenerator.Tests.csproj b/src/Avalonia.NameGenerator.Tests/Avalonia.NameGenerator.Tests.csproj index a214438016..1e680ec7a6 100644 --- a/src/Avalonia.NameGenerator.Tests/Avalonia.NameGenerator.Tests.csproj +++ b/src/Avalonia.NameGenerator.Tests/Avalonia.NameGenerator.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt index 22d2f9bb5b..b43970a06b 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt index dd2b749e4b..76074b129c 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt index 22d2f9bb5b..b43970a06b 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt index 924a13b109..134e68f3e2 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt index 795cce5485..bb323cdfbb 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt index 4239b6f47e..fd02196758 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt index 22d2f9bb5b..b43970a06b 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt index 172f948eea..ea42cd8e00 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NoNamedControls.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NoNamedControls.txt index 51c7369371..7f7cf3bdb4 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NoNamedControls.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NoNamedControls.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt index 95d6a4feb7..9d228e01fe 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt index 22d2f9bb5b..b43970a06b 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt index 172f948eea..ea42cd8e00 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt @@ -1,5 +1,6 @@ // +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; diff --git a/src/Avalonia.NameGenerator/Generator.props b/src/Avalonia.NameGenerator/Generator.props index 91883faf5c..ba46b88591 100644 --- a/src/Avalonia.NameGenerator/Generator.props +++ b/src/Avalonia.NameGenerator/Generator.props @@ -1,6 +1,6 @@  - OnlyProperties + InitializeComponent internal * * diff --git a/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs b/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs index 43ab7d9b7a..858420c463 100644 --- a/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs +++ b/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs @@ -21,7 +21,7 @@ namespace Avalonia.NameGenerator.Generator _diagnosticsAreConnected = types.FindAssembly("Avalonia.Diagnostics") != null; } - public string GenerateCode(string className, string nameSpace, IXamlType XamlType, IEnumerable names) + public string GenerateCode(string className, string nameSpace, IXamlType xamlType, IEnumerable names) { var properties = new List(); var initializations = new List(); @@ -31,10 +31,11 @@ namespace Avalonia.NameGenerator.Generator initializations.Add($" {name} = this.FindControl(\"{name}\");"); } - var attachDevTools = _diagnosticsAreConnected && IsWindow(XamlType); + var attachDevTools = _diagnosticsAreConnected && IsWindow(xamlType); return $@"// +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; @@ -58,9 +59,9 @@ namespace {nameSpace} "; } - private bool IsWindow(IXamlType XamlType) + private static bool IsWindow(IXamlType xamlType) { - var type = XamlType; + var type = xamlType; bool isWindow; do { diff --git a/src/Avalonia.NameGenerator/GeneratorOptions.cs b/src/Avalonia.NameGenerator/GeneratorOptions.cs index 6801ce29a7..2602ef1af4 100644 --- a/src/Avalonia.NameGenerator/GeneratorOptions.cs +++ b/src/Avalonia.NameGenerator/GeneratorOptions.cs @@ -35,8 +35,7 @@ namespace Avalonia.NameGenerator { get { - var defaultBehavior = Behavior.OnlyProperties; - + const Behavior defaultBehavior = Behavior.InitializeComponent; var propertyValue = _context .GetMSBuildProperty( nameof(BuildProperties.AvaloniaNameGeneratorBehavior), @@ -52,7 +51,7 @@ namespace Avalonia.NameGenerator { get { - var defaultFieldModifier = DefaultFieldModifier.Internal; + const DefaultFieldModifier defaultFieldModifier = DefaultFieldModifier.Internal; var propertyValue = _context .GetMSBuildProperty( nameof(BuildProperties.AvaloniaNameGeneratorDefaultFieldModifier), diff --git a/version.json b/version.json index 9dd5af95d7..a62244a1ef 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "0.5", + "version": "1.0", "assemblyVersion": { "precision": "revision" },