2018-12-07 03:55:31 +03:00
|
|
|
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
|
|
|
|
# https://editorconfig.org
|
|
|
|
|
|
|
|
# top-most EditorConfig file
|
2016-05-26 23:39:00 +03:00
|
|
|
root = true
|
|
|
|
|
2018-12-07 03:55:31 +03:00
|
|
|
# Default settings:
|
|
|
|
# A newline ending every file
|
|
|
|
# Use 4 spaces as indentation
|
|
|
|
[*]
|
2020-09-29 13:15:44 +03:00
|
|
|
# insert_final_newline = false
|
2018-12-07 03:55:31 +03:00
|
|
|
indent_style = space
|
|
|
|
indent_size = 4
|
|
|
|
|
|
|
|
[project.json]
|
|
|
|
indent_size = 2
|
|
|
|
|
|
|
|
# C# files
|
|
|
|
[*.cs]
|
2018-02-23 14:26:50 +03:00
|
|
|
indent_style = tab
|
2018-12-07 03:55:31 +03:00
|
|
|
|
2022-04-28 17:43:25 +03:00
|
|
|
dotnet_diagnostic.CA1416.severity = error
|
[build] Update to .NET 6 Preview 4 (#796)
* [build] Update to .NET 6 Preview 4
Brings in Preview 4 updates for the Android, MaciOS, and .NET SDks.
Initial build attempts were failing with hundreds of errors:
D:\a\1\s\src\Essentials\src\Connectivity\Connectivity.ios.tvos.macos.cs(12,70): error BI1234: 'CTCellularData' is obsolete: 'Starting with ios14.0 Use the 'CallKit' API instead.' [D:\a\1\s\src\Essentials\src\Essentials-net6.csproj]
D:\a\1\s\src\Essentials\src\Compass\Compass.ios.cs(31,6): error CA1416: This call site is reachable on: 'iOS' 13.6 and later. 'CLLocationManager.HeadingFilter' is only supported on: 'macos' 11.0 and later. [D:\a\1\s\src\Essentials\src\Essentials-net6.csproj]
D:\a\1\s\src\Core\src\Platform\MaciOS\ColorExtensions.cs(64,13): error CA1416: This call site is reachable on: 'MacCatalyst' 13.5 and later. 'UIColor.SystemBackgroundColor.get' is supported on: 'ios' 13.0 and later. [D:\a\1\s\src\Core\src\Core-net6.csproj]
CSC : error AD0001: Analyzer 'Microsoft.NetCore.Analyzers.InteropServices.PlatformCompatibilityAnalyzer' threw an exception of type 'System.NullReferenceException' with message 'Object reference not set to an instance of an object.'. [D:\a\1\s\src\BlazorWebView\src\core\Microsoft.AspNetCore.Components.WebView.Maui.csproj]
The [platform compatibility analyzer][0] has been disabled for now, and
it can be enabled locally to work through the few hundred errors in
future PRs.
Once these issues were sorted, there were a handful of other breaks
that I've attempted to fix:
D:\a\1\s\src\Essentials\src\AssemblyInfo\AssemblyInfo.ios.tvos.watchos.macos.cs(3,12): error CS0618: 'LinkerSafeAttribute' is obsolete: 'Replace with '[assembly: System.Reflection.AssemblyMetadata ("IsTrimmable", "True")]'.' [D:\a\1\s\src\Essentials\src\Essentials-net6.csproj]
D:\a\1\s\src\Compatibility\Core\src\iOS\Renderers\TabbedRenderer.cs(422,33): error CS1503: Argument 1: cannot convert from 'UIKit.UIStringAttributes' to 'UIKit.UITextAttributes' [D:\a\1\s\src\Compatibility\Core\src\Compatibility-net6.csproj]
D:\a\1\s\src\Compatibility\Core\src\iOS\CollectionView\CarouselViewController.cs(106,23): error CS0114: 'CarouselViewController.DraggingStarted(UIScrollView)' hides inherited member 'UICollectionViewController.DraggingStarted(UIScrollView)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword. [ D:\a\1\s\src\Compatibility\Core\src\Compatibility-net6.csproj]
D:\a\1\s\src\Compatibility\Core\src\iOS\CollectionView\CarouselViewController.cs(117,23): error CS0114: 'CarouselViewController.DraggingEnded(UIScrollView, bool)' hides inherited member 'UICollectionViewController.DraggingEnded(UIScrollView, bool)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword. [ D:\a\1\s\src\Compatibility\Core\src\Compatibility-net6.csproj]
Finally it seems JDK 14 was being preferred on macOS machines in CI, so
I've set `$(JI_JAVA_HOME)` to the [pre-installed JDK 11][1].
[0]: https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1416
[1]: https://github.com/actions/virtual-environments/blob/macOS-10.15/20210419.2/images/macos/macos-10.15-Readme.md#java
* Apply feedback, bump p4 bits, provision xcode 12.5 rc
* Use Big Sur pool, clean up duplicate variable declaration
* Revert "Use Big Sur pool, clean up duplicate variable declaration"
This reverts commit b91482e10cdef99158e9060c9bf51298a74d89a8.
* Disable linker for ios and catalyst
Co-authored-by: Rui Marinho <me@ruimarinho.net>
2021-04-24 13:32:18 +03:00
|
|
|
|
2022-03-18 22:38:25 +03:00
|
|
|
# TODO: Remove this to reenable the COMAnalyzer once https://github.com/dotnet/linker/issues/2686 is fixed
|
|
|
|
dotnet_diagnostic.IL2050.severity = none
|
|
|
|
|
2022-03-02 02:14:18 +03:00
|
|
|
# Code analyzers
|
|
|
|
dotnet_diagnostic.CA1307.severity = error
|
|
|
|
dotnet_diagnostic.CA1309.severity = error
|
2023-04-26 22:04:54 +03:00
|
|
|
dotnet_diagnostic.CA1311.severity = error
|
[core] `WeakEventManager+Subscription` needs `IEquatable` (#13232)
Context: https://github.com/Vroomer/MAUI-master-detail-memory-leak
Context: https://github.com/dotnet/maui/issues/12039
Using the Visual Studio's `.NET Object Allocation Tracking` profiler
on the sample above I noticed after app launch:
Microsoft.Maui.WeakEventManager+Subscription
Allocations: 686,114
Bytes: 21,955,648
After spitting out my coffee, I drilled in a bit to see where these
are being created:
System.Collections.Generic.ObjectEqualityComparer<Microsoft.Maui.WeakEventManager+Subscription>.IndexOf
It turns out this `struct` doesn't implement `IEquatable<T>`:
https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1815
To solve this:
* `Subscription` is private, so we can make it a `readonly struct`.
* `dotnet_diagnostic.CA1815.severity = error` across the entire repo.
* Implement `IEquatable<T>` for all `struct` types.
After these changes, I can't find `Microsoft.Maui.WeakEventManager+Subscription`
in the memory report at all. Which assuming means, I saved ~21 MB of
allocations in this app.
Note that this doesn't actually solve #12039, as I'm still
investigating the leak. Maybe this partially closes the floodgate?
* Fix `struct`s in Controls.Core
Note that I did not update these, as they are some "internal" parts
from Xamarin.Forms:
* `Profile`
* `Datum`
We might actually just consider removing these in the future.
* Suppress warnings in Compatibility
I assume these structs aren't nearly as important, so ignoring a few.
They appear to be called once at startup in most cases.
* Disable `CA1815` in tests.
2023-02-10 18:20:21 +03:00
|
|
|
dotnet_diagnostic.CA1815.severity = error
|
2024-01-16 17:44:56 +03:00
|
|
|
dotnet_diagnostic.CA1825.severity = error
|
2022-03-02 02:14:18 +03:00
|
|
|
|
2023-03-17 11:55:49 +03:00
|
|
|
# nullability checks
|
|
|
|
|
|
|
|
dotnet_diagnostic.IDE0029.severity = error
|
|
|
|
dotnet_diagnostic.IDE0031.severity = error
|
|
|
|
dotnet_diagnostic.IDE0041.severity = error
|
|
|
|
|
2018-12-07 03:55:31 +03:00
|
|
|
# Modifier preferences
|
|
|
|
dotnet_style_require_accessibility_modifiers = never:suggestion
|
|
|
|
|
|
|
|
# New line preferences
|
|
|
|
csharp_new_line_before_open_brace = all
|
|
|
|
csharp_new_line_before_else = true
|
|
|
|
csharp_new_line_before_catch = true
|
|
|
|
csharp_new_line_before_finally = true
|
|
|
|
csharp_new_line_before_members_in_object_initializers = true
|
|
|
|
csharp_new_line_before_members_in_anonymous_types = true
|
|
|
|
csharp_new_line_between_query_expression_clauses = true
|
|
|
|
|
|
|
|
# Indentation preferences
|
|
|
|
csharp_indent_block_contents = true
|
|
|
|
csharp_indent_braces = false
|
|
|
|
csharp_indent_case_contents = true
|
|
|
|
csharp_indent_switch_labels = true
|
|
|
|
csharp_indent_labels = one_less_than_current
|
|
|
|
|
|
|
|
# avoid this. unless absolutely necessary
|
|
|
|
dotnet_style_qualification_for_field = false:suggestion
|
|
|
|
dotnet_style_qualification_for_property = false:suggestion
|
|
|
|
dotnet_style_qualification_for_method = false:suggestion
|
|
|
|
dotnet_style_qualification_for_event = false:suggestion
|
|
|
|
|
|
|
|
# only use var when it's obvious what the variable type is
|
|
|
|
csharp_style_var_for_built_in_types = true:none
|
|
|
|
csharp_style_var_when_type_is_apparent = true:none
|
|
|
|
csharp_style_var_elsewhere = false:none
|
|
|
|
|
|
|
|
# use language keywords instead of BCL types
|
|
|
|
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
|
|
|
|
dotnet_style_predefined_type_for_member_access = true:suggestion
|
|
|
|
|
|
|
|
# name all constant fields using PascalCase
|
|
|
|
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
|
|
|
|
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
|
|
|
|
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
|
|
|
|
|
|
|
|
dotnet_naming_symbols.constant_fields.applicable_kinds = field
|
|
|
|
dotnet_naming_symbols.constant_fields.required_modifiers = const
|
|
|
|
|
|
|
|
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
|
|
|
|
|
|
|
|
# static fields should be PascalCase
|
|
|
|
dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion
|
|
|
|
dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields
|
|
|
|
dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style
|
|
|
|
|
|
|
|
dotnet_naming_symbols.static_fields.applicable_kinds = field
|
|
|
|
dotnet_naming_symbols.static_fields.required_modifiers = static
|
|
|
|
|
|
|
|
dotnet_naming_style.static_prefix_style.capitalization = pascal_case
|
|
|
|
|
|
|
|
# internal and private fields should be _camelCase
|
|
|
|
dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion
|
|
|
|
dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields
|
|
|
|
dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style
|
|
|
|
|
|
|
|
dotnet_naming_symbols.private_internal_fields.applicable_kinds = field
|
|
|
|
dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal
|
|
|
|
|
|
|
|
dotnet_naming_style.camel_case_underscore_style.required_prefix = _
|
|
|
|
dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case
|
|
|
|
|
|
|
|
# Code style defaults
|
|
|
|
dotnet_sort_system_directives_first = true
|
|
|
|
csharp_preserve_single_line_blocks = true
|
|
|
|
csharp_preserve_single_line_statements = false
|
2024-03-07 10:34:41 +03:00
|
|
|
csharp_prefer_braces = true:suggestion
|
2018-12-07 03:55:31 +03:00
|
|
|
|
|
|
|
# Expression-level preferences
|
|
|
|
dotnet_style_object_initializer = true:suggestion
|
|
|
|
dotnet_style_collection_initializer = true:suggestion
|
|
|
|
dotnet_style_explicit_tuple_names = true:suggestion
|
|
|
|
dotnet_style_coalesce_expression = true:suggestion
|
|
|
|
dotnet_style_null_propagation = true:suggestion
|
|
|
|
|
|
|
|
# Expression-bodied members
|
|
|
|
csharp_style_expression_bodied_methods = false:none
|
|
|
|
csharp_style_expression_bodied_constructors = false:none
|
|
|
|
csharp_style_expression_bodied_operators = false:none
|
|
|
|
csharp_style_expression_bodied_properties = true:none
|
|
|
|
csharp_style_expression_bodied_indexers = true:none
|
|
|
|
csharp_style_expression_bodied_accessors = true:none
|
|
|
|
|
|
|
|
# Pattern matching
|
|
|
|
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
|
|
|
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
|
|
|
csharp_style_inlined_variable_declaration = true:suggestion
|
|
|
|
|
|
|
|
# Null checking preferences
|
|
|
|
csharp_style_throw_expression = true:suggestion
|
|
|
|
csharp_style_conditional_delegate_call = true:suggestion
|
|
|
|
|
|
|
|
# Space preferences
|
|
|
|
csharp_space_after_cast = false
|
|
|
|
csharp_space_after_colon_in_inheritance_clause = true
|
|
|
|
csharp_space_after_comma = true
|
|
|
|
csharp_space_after_dot = false
|
|
|
|
csharp_space_after_keywords_in_control_flow_statements = true
|
|
|
|
csharp_space_after_semicolon_in_for_statement = true
|
|
|
|
csharp_space_around_binary_operators = before_and_after
|
|
|
|
csharp_space_around_declaration_statements = do_not_ignore
|
|
|
|
csharp_space_before_colon_in_inheritance_clause = true
|
|
|
|
csharp_space_before_comma = false
|
|
|
|
csharp_space_before_dot = false
|
|
|
|
csharp_space_before_open_square_brackets = false
|
|
|
|
csharp_space_before_semicolon_in_for_statement = false
|
|
|
|
csharp_space_between_empty_square_brackets = false
|
|
|
|
csharp_space_between_method_call_empty_parameter_list_parentheses = false
|
|
|
|
csharp_space_between_method_call_name_and_opening_parenthesis = false
|
|
|
|
csharp_space_between_method_call_parameter_list_parentheses = false
|
|
|
|
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
|
|
|
|
csharp_space_between_method_declaration_name_and_open_parenthesis = false
|
|
|
|
csharp_space_between_method_declaration_parameter_list_parentheses = false
|
|
|
|
csharp_space_between_parentheses = false
|
|
|
|
csharp_space_between_square_brackets = false
|
|
|
|
|
|
|
|
# C++ Files
|
|
|
|
[*.{cpp,h,in}]
|
|
|
|
curly_bracket_next_line = true
|
|
|
|
indent_brace_style = Allman
|
|
|
|
|
|
|
|
# Xml project files
|
|
|
|
[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}]
|
|
|
|
indent_size = 2
|
|
|
|
|
|
|
|
# Xml build files
|
|
|
|
[*.builds]
|
|
|
|
indent_size = 2
|
|
|
|
|
|
|
|
# Xml files
|
|
|
|
[*.{xml,stylecop,resx,ruleset}]
|
|
|
|
indent_size = 2
|
|
|
|
|
|
|
|
# Xaml files
|
|
|
|
[*.{xaml}]
|
|
|
|
indent_size = 2
|
|
|
|
|
|
|
|
# Xml config files
|
|
|
|
[*.{props,targets,config,nuspec}]
|
|
|
|
indent_size = 2
|
|
|
|
|
|
|
|
# Shell scripts
|
|
|
|
[*.sh]
|
|
|
|
end_of_line = lf
|
|
|
|
[*.{cmd, bat}]
|
|
|
|
end_of_line = crlf
|
2023-09-27 04:02:04 +03:00
|
|
|
|
|
|
|
# Ignore Banned APIs that get generated by the WinUI Xaml Generator
|
|
|
|
# This is currently being used for the banned Services/Application APIs
|
|
|
|
[**/obj/**/XamlTypeInfo.g.cs]
|
|
|
|
dotnet_diagnostic.RS0030.severity = none
|