Browse Source

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] <support@github.com>
* docs: Update the documentation
* fix: Update Generator.props
* housekeeping: Update version.json
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
pull/10407/head 1.0.1
Artyom V. Gorchakov 5 years ago
committed by GitHub
parent
commit
97e00cba95
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 54
      README.md
  2. 4
      src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml.cs
  3. 2
      src/Avalonia.NameGenerator.Tests/Avalonia.NameGenerator.Tests.csproj
  4. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt
  5. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt
  6. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt
  7. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt
  8. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt
  9. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt
  10. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt
  11. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt
  12. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NoNamedControls.txt
  13. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt
  14. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt
  15. 1
      src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt
  16. 2
      src/Avalonia.NameGenerator/Generator.props
  17. 9
      src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs
  18. 5
      src/Avalonia.NameGenerator/GeneratorOptions.cs
  19. 2
      version.json

54
README.md

@ -85,19 +85,23 @@ The `x:Name` generator can be configured via MsBuild properties that you can put
- `AvaloniaNameGeneratorBehavior` - `AvaloniaNameGeneratorBehavior`
Possible values: `OnlyProperties`, `InitializeComponent` Possible values: `OnlyProperties`, `InitializeComponent`
Default value: `InitializeComponent`
Determines if the generator should generate get-only properties, or the `InitializeComponent` method. Determines if the generator should generate get-only properties, or the `InitializeComponent` method.
- `AvaloniaNameGeneratorDefaultFieldModifier` - `AvaloniaNameGeneratorDefaultFieldModifier`
Possible values: `internal`, `public`, `private`, `protected` 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. The default field modifier that should be used when there is no `x:FieldModifier` directive specified.
- `AvaloniaNameGeneratorFilterByPath` - `AvaloniaNameGeneratorFilterByPath`
Posssible format: `glob_pattern`, `glob_pattern;glob_pattern` 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). The generator will process only XAML files with paths matching the specified glob pattern(s).
Example: `*/Views/*View.xaml`, `*View.axaml;*Control.axaml` Example: `*/Views/*View.xaml`, `*View.axaml;*Control.axaml`
- `AvaloniaNameGeneratorFilterByNamespace` - `AvaloniaNameGeneratorFilterByNamespace`
Posssible format: `glob_pattern`, `glob_pattern;glob_pattern` 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). 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` Example: `MyApp.Presentation.*`, `MyApp.Presentation.Views;MyApp.Presentation.Controls`
@ -106,7 +110,7 @@ The default values are given by:
```xml ```xml
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<AvaloniaNameGeneratorBehavior>OnlyProperties</AvaloniaNameGeneratorBehavior> <AvaloniaNameGeneratorBehavior>InitializeComponent</AvaloniaNameGeneratorBehavior>
<AvaloniaNameGeneratorDefaultFieldModifier>internal</AvaloniaNameGeneratorDefaultFieldModifier> <AvaloniaNameGeneratorDefaultFieldModifier>internal</AvaloniaNameGeneratorDefaultFieldModifier>
<AvaloniaNameGeneratorFilterByPath>*</AvaloniaNameGeneratorFilterByPath> <AvaloniaNameGeneratorFilterByPath>*</AvaloniaNameGeneratorFilterByPath>
<AvaloniaNameGeneratorFilterByNamespace>*</AvaloniaNameGeneratorFilterByNamespace> <AvaloniaNameGeneratorFilterByNamespace>*</AvaloniaNameGeneratorFilterByNamespace>
@ -119,30 +123,7 @@ The default values are given by:
### What do the generated sources look like? ### 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: 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
// <auto-generated />
using Avalonia.Controls;
namespace Avalonia.NameGenerator.Sandbox.Views
{
partial class SignUpView
{
internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindControl<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>("UserNameTextBox");
public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("UserNameValidation");
private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindControl<global::Avalonia.Controls.TextBox>("PasswordTextBox");
internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("PasswordValidation");
internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindControl<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("ConfirmPasswordValidation");
internal global::Avalonia.Controls.Button SignUpButton => this.FindControl<global::Avalonia.Controls.Button>("SignUpButton");
internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("CompoundValidation");
}
}
```
If you enable the `InitializeComponent` source generator mode, you get:
```cs ```cs
// <auto-generated /> // <auto-generated />
@ -192,3 +173,26 @@ namespace Sample.App
} }
} }
``` ```
If you enable the `OnlyProperties` source generator mode, you get:
```cs
// <auto-generated />
using Avalonia.Controls;
namespace Avalonia.NameGenerator.Sandbox.Views
{
partial class SignUpView
{
internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindControl<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>("UserNameTextBox");
public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("UserNameValidation");
private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindControl<global::Avalonia.Controls.TextBox>("PasswordTextBox");
internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("PasswordValidation");
internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindControl<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("ConfirmPasswordValidation");
internal global::Avalonia.Controls.Button SignUpButton => this.FindControl<global::Avalonia.Controls.Button>("SignUpButton");
internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindControl<global::Avalonia.Controls.TextBlock>("CompoundValidation");
}
}
```

4
src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml.cs

@ -1,5 +1,4 @@
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Avalonia.NameGenerator.Sandbox.Views namespace Avalonia.NameGenerator.Sandbox.Views
{ {
@ -14,8 +13,7 @@ namespace Avalonia.NameGenerator.Sandbox.Views
{ {
public SignUpView() public SignUpView()
{ {
AvaloniaXamlLoader.Load(this); InitializeComponent();
UserNameTextBox.Text = "Joseph!"; UserNameTextBox.Text = "Joseph!";
UserNameValidation.Text = "User name is valid."; UserNameValidation.Text = "User name is valid.";
PasswordTextBox.Text = "qwerty"; PasswordTextBox.Text = "qwerty";

2
src/Avalonia.NameGenerator.Tests/Avalonia.NameGenerator.Tests.csproj

@ -10,7 +10,7 @@
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.8.0" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.8.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.8.0" /> <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.8.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.1" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.console" Version="2.4.1" /> <PackageReference Include="xunit.runner.console" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/NoNamedControls.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

1
src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt

@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;

2
src/Avalonia.NameGenerator/Generator.props

@ -1,6 +1,6 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<AvaloniaNameGeneratorBehavior Condition="'$(AvaloniaNameGeneratorBehavior)' == ''">OnlyProperties</AvaloniaNameGeneratorBehavior> <AvaloniaNameGeneratorBehavior Condition="'$(AvaloniaNameGeneratorBehavior)' == ''">InitializeComponent</AvaloniaNameGeneratorBehavior>
<AvaloniaNameGeneratorDefaultFieldModifier Condition="'$(AvaloniaNameGeneratorDefaultFieldModifier)' == ''">internal</AvaloniaNameGeneratorDefaultFieldModifier> <AvaloniaNameGeneratorDefaultFieldModifier Condition="'$(AvaloniaNameGeneratorDefaultFieldModifier)' == ''">internal</AvaloniaNameGeneratorDefaultFieldModifier>
<AvaloniaNameGeneratorFilterByPath Condition="'$(AvaloniaNameGeneratorFilterByPath)' == ''">*</AvaloniaNameGeneratorFilterByPath> <AvaloniaNameGeneratorFilterByPath Condition="'$(AvaloniaNameGeneratorFilterByPath)' == ''">*</AvaloniaNameGeneratorFilterByPath>
<AvaloniaNameGeneratorFilterByNamespace Condition="'$(AvaloniaNameGeneratorFilterByNamespace)' == ''">*</AvaloniaNameGeneratorFilterByNamespace> <AvaloniaNameGeneratorFilterByNamespace Condition="'$(AvaloniaNameGeneratorFilterByNamespace)' == ''">*</AvaloniaNameGeneratorFilterByNamespace>

9
src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs

@ -21,7 +21,7 @@ namespace Avalonia.NameGenerator.Generator
_diagnosticsAreConnected = types.FindAssembly("Avalonia.Diagnostics") != null; _diagnosticsAreConnected = 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)
{ {
var properties = new List<string>(); var properties = new List<string>();
var initializations = new List<string>(); var initializations = new List<string>();
@ -31,10 +31,11 @@ namespace Avalonia.NameGenerator.Generator
initializations.Add($" {name} = this.FindControl<global::{typeName}>(\"{name}\");"); initializations.Add($" {name} = this.FindControl<global::{typeName}>(\"{name}\");");
} }
var attachDevTools = _diagnosticsAreConnected && IsWindow(XamlType); var attachDevTools = _diagnosticsAreConnected && IsWindow(xamlType);
return $@"// <auto-generated /> return $@"// <auto-generated />
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; 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; bool isWindow;
do do
{ {

5
src/Avalonia.NameGenerator/GeneratorOptions.cs

@ -35,8 +35,7 @@ namespace Avalonia.NameGenerator
{ {
get get
{ {
var defaultBehavior = Behavior.OnlyProperties; const Behavior defaultBehavior = Behavior.InitializeComponent;
var propertyValue = _context var propertyValue = _context
.GetMSBuildProperty( .GetMSBuildProperty(
nameof(BuildProperties.AvaloniaNameGeneratorBehavior), nameof(BuildProperties.AvaloniaNameGeneratorBehavior),
@ -52,7 +51,7 @@ namespace Avalonia.NameGenerator
{ {
get get
{ {
var defaultFieldModifier = DefaultFieldModifier.Internal; const DefaultFieldModifier defaultFieldModifier = DefaultFieldModifier.Internal;
var propertyValue = _context var propertyValue = _context
.GetMSBuildProperty( .GetMSBuildProperty(
nameof(BuildProperties.AvaloniaNameGeneratorDefaultFieldModifier), nameof(BuildProperties.AvaloniaNameGeneratorDefaultFieldModifier),

2
version.json

@ -1,6 +1,6 @@
{ {
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
"version": "0.5", "version": "1.0",
"assemblyVersion": { "assemblyVersion": {
"precision": "revision" "precision": "revision"
}, },

Loading…
Cancel
Save