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`
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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AvaloniaNameGeneratorBehavior>OnlyProperties</AvaloniaNameGeneratorBehavior>
<AvaloniaNameGeneratorBehavior>InitializeComponent</AvaloniaNameGeneratorBehavior>
<AvaloniaNameGeneratorDefaultFieldModifier>internal</AvaloniaNameGeneratorDefaultFieldModifier>
<AvaloniaNameGeneratorFilterByPath>*</AvaloniaNameGeneratorFilterByPath>
<AvaloniaNameGeneratorFilterByNamespace>*</AvaloniaNameGeneratorFilterByNamespace>
@ -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
// <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:
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 />
@ -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.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";

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.Common" Version="3.8.0" />
<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.runner.console" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -1,5 +1,6 @@
// <auto-generated />
using Avalonia;
using Avalonia.Controls;
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">
<PropertyGroup>
<AvaloniaNameGeneratorBehavior Condition="'$(AvaloniaNameGeneratorBehavior)' == ''">OnlyProperties</AvaloniaNameGeneratorBehavior>
<AvaloniaNameGeneratorBehavior Condition="'$(AvaloniaNameGeneratorBehavior)' == ''">InitializeComponent</AvaloniaNameGeneratorBehavior>
<AvaloniaNameGeneratorDefaultFieldModifier Condition="'$(AvaloniaNameGeneratorDefaultFieldModifier)' == ''">internal</AvaloniaNameGeneratorDefaultFieldModifier>
<AvaloniaNameGeneratorFilterByPath Condition="'$(AvaloniaNameGeneratorFilterByPath)' == ''">*</AvaloniaNameGeneratorFilterByPath>
<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;
}
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 initializations = new List<string>();
@ -31,10 +31,11 @@ namespace Avalonia.NameGenerator.Generator
initializations.Add($" {name} = this.FindControl<global::{typeName}>(\"{name}\");");
}
var attachDevTools = _diagnosticsAreConnected && IsWindow(XamlType);
var attachDevTools = _diagnosticsAreConnected && IsWindow(xamlType);
return $@"// <auto-generated />
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
{

5
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),

2
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"
},

Loading…
Cancel
Save