From 6fb8302f4fd0c9468c1c37287871d98345d09f25 Mon Sep 17 00:00:00 2001 From: Rodrigo Reyes Date: Wed, 19 Aug 2020 22:13:43 -0500 Subject: [PATCH 1/5] Added DocFX and ByteDecoder.Common updated t0 0.3.4 --- docs/.gitignore | 9 ++++ docs/api/.gitignore | 5 +++ docs/api/index.md | 2 + docs/articles/intro.md | 1 + docs/articles/toc.yml | 2 + docs/docfx.json | 64 ++++++++++++++++++++++++++++ docs/index.md | 4 ++ docs/toc.yml | 5 +++ gh-pages | 1 + src/RoyalLibrary/RoyalLibrary.csproj | 2 +- src/release-docfx.sh | 29 +++++++++++++ 11 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 docs/.gitignore create mode 100644 docs/api/.gitignore create mode 100644 docs/api/index.md create mode 100644 docs/articles/intro.md create mode 100644 docs/articles/toc.yml create mode 100644 docs/docfx.json create mode 100644 docs/index.md create mode 100644 docs/toc.yml create mode 160000 gh-pages create mode 100755 src/release-docfx.sh diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..4378419 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,9 @@ +############### +# folder # +############### +/**/DROP/ +/**/TEMP/ +/**/packages/ +/**/bin/ +/**/obj/ +_site diff --git a/docs/api/.gitignore b/docs/api/.gitignore new file mode 100644 index 0000000..e8079a3 --- /dev/null +++ b/docs/api/.gitignore @@ -0,0 +1,5 @@ +############### +# temp file # +############### +*.yml +.manifest diff --git a/docs/api/index.md b/docs/api/index.md new file mode 100644 index 0000000..78dc9c0 --- /dev/null +++ b/docs/api/index.md @@ -0,0 +1,2 @@ +# PLACEHOLDER +TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*! diff --git a/docs/articles/intro.md b/docs/articles/intro.md new file mode 100644 index 0000000..c0478ce --- /dev/null +++ b/docs/articles/intro.md @@ -0,0 +1 @@ +# Add your introductions here! diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml new file mode 100644 index 0000000..ff89ef1 --- /dev/null +++ b/docs/articles/toc.yml @@ -0,0 +1,2 @@ +- name: Introduction + href: intro.md diff --git a/docs/docfx.json b/docs/docfx.json new file mode 100644 index 0000000..309ee8a --- /dev/null +++ b/docs/docfx.json @@ -0,0 +1,64 @@ +{ + "metadata": [ + { + "src": [ + { + "files": ["src/RoyalLibrary/RoyalLibrary.csproj"], + "exclude": ["**/obj/**", "**/bin/**", "_site/**"], + "cwd": ".." + } + ], + "dest": "api", + "disableGitFeatures": false, + "disableDefaultFilter": false + } + ], + "build": { + "content": [ + { + "files": [ + "api/**.yml", + "api/index.md" + ] + }, + { + "files": [ + "articles/**.md", + "articles/**/toc.yml", + "toc.yml", + "*.md" + ] + } + ], + "resource": [ + { + "files": [ + "images/**" + ] + } + ], + "overwrite": [ + { + "files": [ + "apidoc/**.md" + ], + "exclude": [ + "obj/**", + "_site/**" + ] + } + ], + "dest": "_site", + "globalMetadataFiles": [], + "fileMetadataFiles": [], + "template": [ + "default" + ], + "postProcessors": [], + "markdownEngineName": "markdig", + "noLangKeyword": false, + "keepFileLink": false, + "cleanupCacheHistory": false, + "disableGitFeatures": false + } +} \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..3ae2506 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,4 @@ +# This is the **HOMEPAGE**. +Refer to [Markdown](http://daringfireball.net/projects/markdown/) for how to write markdown files. +## Quick Start Notes: +1. Add images to the *images* folder if the file is referencing an image. diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 0000000..59f8010 --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,5 @@ +- name: Articles + href: articles/ +- name: Api Documentation + href: api/ + homepage: api/index.md diff --git a/gh-pages b/gh-pages new file mode 160000 index 0000000..994ff01 --- /dev/null +++ b/gh-pages @@ -0,0 +1 @@ +Subproject commit 994ff01954ec2a5a05b3cfbd54da3bb7d5774817 diff --git a/src/RoyalLibrary/RoyalLibrary.csproj b/src/RoyalLibrary/RoyalLibrary.csproj index 65ca446..cd5f2e1 100644 --- a/src/RoyalLibrary/RoyalLibrary.csproj +++ b/src/RoyalLibrary/RoyalLibrary.csproj @@ -29,7 +29,7 @@ - + diff --git a/src/release-docfx.sh b/src/release-docfx.sh new file mode 100755 index 0000000..8ecb639 --- /dev/null +++ b/src/release-docfx.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +export VSINSTALLDIR="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community" +export VisualStudioVersion="16.0" + +docfx ../docs/docfx.json + +SOURCE_DIR=$PWD/../docs +TEMP_REPO_DIR=$PWD/../gh-pages + +echo "Removing temporary doc directory $TEMP_REPO_DIR" +rm -rf $TEMP_REPO_DIR +mkdir $TEMP_REPO_DIR + +echo "Cloning the repo with the gh-pages branch" +git clone git@github.com:ByteDecoder/RoyalLibrary.git --branch gh-pages $TEMP_REPO_DIR + +echo "Clear repo directory" +cd $TEMP_REPO_DIR +git rm -r * + +echo "Copy documentation into the repo" +cp -r $SOURCE_DIR/../docs/_site/* . + +echo "Push the new docs to the remote branch" +git add . -A +git commit -m "Update generated documentation" +git push origin gh-pages \ No newline at end of file From 572200e2e4748851a518f26096020761e6b94b22 Mon Sep 17 00:00:00 2001 From: Rodrigo Reyes Date: Wed, 19 Aug 2020 22:27:30 -0500 Subject: [PATCH 2/5] Updated CHANGELOG --- .gitignore | 3 ++- CHANGELOG | 3 +++ gh-pages | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) delete mode 160000 gh-pages diff --git a/.gitignore b/.gitignore index 01cd032..0a94ee7 100644 --- a/.gitignore +++ b/.gitignore @@ -353,4 +353,5 @@ MigrationBackup/ *.db -coverage/ \ No newline at end of file +coverage/ +gh-pages/ \ No newline at end of file diff --git a/CHANGELOG b/CHANGELOG index 8113edd..fb974ee 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +### 1.5.2 - 2020-08-xx + * ByteDecoder.Common updated to 0.3.4 + ### 1.5.1 - 2020-07-30 * Added AllowedOutputExtensionsInPackageBuildOutputFolder in the csproj meta diff --git a/gh-pages b/gh-pages deleted file mode 160000 index 994ff01..0000000 --- a/gh-pages +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 994ff01954ec2a5a05b3cfbd54da3bb7d5774817 From f569a04e43b2d8a9a1fc22b9640d8907db0f427b Mon Sep 17 00:00:00 2001 From: Rodrigo Reyes Date: Wed, 19 Aug 2020 22:32:50 -0500 Subject: [PATCH 3/5] Added test suite bash script --- src/run-testsuite.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 src/run-testsuite.sh diff --git a/src/run-testsuite.sh b/src/run-testsuite.sh new file mode 100755 index 0000000..6bc33bd --- /dev/null +++ b/src/run-testsuite.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +clear + +rm -r ../coverage/* + +dotnet test RoyalLibrary.sln --logger:trx \ + --results-directory ../../coverage \ + /p:CollectCoverage=true \ + /p:CoverletOutput=../../coverage/ \ + /p:CoverletOutputFormat=\"lcov,json\" \ + /p:MergeWith=../../coverage/coverage.json + +echo "Preparing lcov.info for Coverage Gutters" +rm ../coverage/lcov.info +mv ../coverage/coverage.info ../coverage/lcov.info + +echo Preparing Test Report with reportgenerator +reportgenerator "-reports:../coverage/lcov.info" "-reporttypes:HTMLInline;Badges" "-targetdir:../coverage/report" + +echo "We are Legion..." \ No newline at end of file From 111b862c4f566e5be5586ca117d1d9275057998c Mon Sep 17 00:00:00 2001 From: Rodrigo Reyes Date: Thu, 20 Aug 2020 15:39:22 -0500 Subject: [PATCH 4/5] Added SVG logos to the DocFX --- docs/api/index.md | 5 ++- docs/app_logo.svg | 42 +++++++++++++++++++ docs/app_racer.svg | 41 +++++++++++++++++++ docs/articles/intro.md | 59 ++++++++++++++++++++++++++- docs/articles/toc.yml | 2 +- docs/docfx.json | 36 +++++----------- docs/index.md | 35 ++++++++++++++-- docs/racer.ico | Bin 0 -> 105717 bytes media/racer.ico | Bin 0 -> 105717 bytes src/RoyalLibrary/RoyalLibrary.csproj | 2 +- 10 files changed, 188 insertions(+), 34 deletions(-) create mode 100644 docs/app_logo.svg create mode 100644 docs/app_racer.svg create mode 100644 docs/racer.ico create mode 100644 media/racer.ico diff --git a/docs/api/index.md b/docs/api/index.md index 78dc9c0..3ddf34e 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -1,2 +1,3 @@ -# PLACEHOLDER -TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*! +# ByteDecoder.RoyalLibrary + +Collection of useful LINQ query operators diff --git a/docs/app_logo.svg b/docs/app_logo.svg new file mode 100644 index 0000000..077dfc5 --- /dev/null +++ b/docs/app_logo.svg @@ -0,0 +1,42 @@ + + + + + + Layer 1 + + + + + + + + + + \ No newline at end of file diff --git a/docs/app_racer.svg b/docs/app_racer.svg new file mode 100644 index 0000000..da7c5ec --- /dev/null +++ b/docs/app_racer.svg @@ -0,0 +1,41 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/articles/intro.md b/docs/articles/intro.md index c0478ce..206ae70 100644 --- a/docs/articles/intro.md +++ b/docs/articles/intro.md @@ -1 +1,58 @@ -# Add your introductions here! +# Examples and usage + +```csharp +var myArray = new[] { 1, 45, 34, 435 }; + +// Evens and odds +myArray.Evens(); +myArray.Odds(); + +// Sum +myArray.TotalAllEvens(); +myArray.TotalAllOdds(); + +// Times +5.Times(_ => { + var theVar = 13; + Debug.Log($"This is {theVar}"); +}); + +// Sequences, IEnumerable + +// Each +myArray.ForEach(item => Debug.Log($"Using the strength: {item}")); + +string[] shapes = { "circle", "square", "triangle", "octagon" }; + +shapes.ForEach(shape => { + shape = shape.ToUpper(); + Debug.Log(shape); +}); + +// Each with Index +shapes.ForEach((item, index) => { + Debug.Log($"Item: {item.ToUpper()} with index: {index}"); +}); + +// Map +myArray.Map(item => item * 2).Each(item => Debug.Log($"Using the strength doubled: {item}")); + +// Max Element in the sequence +var maxBook = SampleData.Books.MaxElement(book => book.PageCount); +Console.WriteLine($"Max Book Page Count => {maxBook.Title}"); + +// Deferred Execution with StreamReader sequences +using var reader = new StreamReader("books.csv"); + +Data = + from line in reader.Lines() + where !line.StartsWith("#") + let parts = line.Split(',') + select new { Title = parts[1], Publisher = parts[3], Isbn = parts[0] }; + +// Indexes +// 10011001000 +IList source = new List { true, false, false, true, true, false, false, true, false, false, false }; +Data = source.TopIndexes(element => element, 4); + +``` diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml index ff89ef1..ccfbc2a 100644 --- a/docs/articles/toc.yml +++ b/docs/articles/toc.yml @@ -1,2 +1,2 @@ -- name: Introduction +- name: Examples and Usage href: intro.md diff --git a/docs/docfx.json b/docs/docfx.json index 309ee8a..affbd02 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -16,44 +16,30 @@ "build": { "content": [ { - "files": [ - "api/**.yml", - "api/index.md" - ] + "files": ["api/**.yml", "api/index.md"] }, { - "files": [ - "articles/**.md", - "articles/**/toc.yml", - "toc.yml", - "*.md" - ] + "files": ["articles/**.md", "articles/**/toc.yml", "toc.yml", "*.md"] } ], "resource": [ { - "files": [ - "images/**" - ] + "files": ["images/**", "app_racer.svg", "racer.ico"] } ], "overwrite": [ { - "files": [ - "apidoc/**.md" - ], - "exclude": [ - "obj/**", - "_site/**" - ] + "files": ["apidoc/**.md"], + "exclude": ["obj/**", "_site/**"] } ], "dest": "_site", - "globalMetadataFiles": [], + "globalMetadata": { + "_appLogoPath": "./app_racer.svg", + "_appFaviconPath": "racer.ico" + }, "fileMetadataFiles": [], - "template": [ - "default" - ], + "template": ["default"], "postProcessors": [], "markdownEngineName": "markdig", "noLangKeyword": false, @@ -61,4 +47,4 @@ "cleanupCacheHistory": false, "disableGitFeatures": false } -} \ No newline at end of file +} diff --git a/docs/index.md b/docs/index.md index 3ae2506..f0e6ee4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,31 @@ -# This is the **HOMEPAGE**. -Refer to [Markdown](http://daringfireball.net/projects/markdown/) for how to write markdown files. -## Quick Start Notes: -1. Add images to the *images* folder if the file is referencing an image. +# Royal Library + +![.NET Core](https://github.com/ByteDecoder/RoyalLibrary/workflows/.NET%20Core/badge.svg?branch=master) +[![Maintainability](https://api.codeclimate.com/v1/badges/7e3f41ebb34cf31f1d82/maintainability)](https://codeclimate.com/github/ByteDecoder/RoyalLibrary/maintainability) +[![Test Coverage](https://api.codeclimate.com/v1/badges/7e3f41ebb34cf31f1d82/test_coverage)](https://codeclimate.com/github/ByteDecoder/RoyalLibrary/test_coverage) + +Collection of useful LINQ query operators + +Targeted to .Net Standard 2.0 + +## Installation + +Install the [RoyalLibrary NuGet Package](https://www.nuget.org/packages/ByteDecoder.RoyalLibrary). + +### Package Manager Console + +```powershell +Install-Package ByteDecoder.RoyalLibrary +``` + +### .NET Core CLI + +```bash +dotnet add package ByteDecoder.RoyalLibrary +``` + +## Contributing + +Bug reports and pull requests are welcome on GitHub at . + +Copyright (c) 2020 [Rodrigo Reyes](https://twitter.com/bytedecoder) released under the MIT license diff --git a/docs/racer.ico b/docs/racer.ico new file mode 100644 index 0000000000000000000000000000000000000000..ab614686004f8ea9dc77098411e38bc72963635a GIT binary patch literal 105717 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.png true ByteDecoder.RoyalLibrary - https://github.com/ByteDecoder/RoyalLibrary + https://bytedecoder.me/RoyalLibrary Collection of useful LINQ query operators $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb From 3ed76490756f72ceb431b0f233d5caf285dff091 Mon Sep 17 00:00:00 2001 From: Rodrigo Reyes Date: Fri, 21 Aug 2020 11:51:02 -0500 Subject: [PATCH 5/5] .editorconfig settings --- src/.editorconfig | 250 ++++++++++++++++++ .../ConditionalIndexExtensions.cs | 2 +- 2 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 src/.editorconfig diff --git a/src/.editorconfig b/src/.editorconfig new file mode 100644 index 0000000..55fd007 --- /dev/null +++ b/src/.editorconfig @@ -0,0 +1,250 @@ +# Schema: http://EditorConfig.org +# Docs: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference + +# top-most EditorConfig file +root = true + +# Don't use tabs for indentation. +[*] +indent_style = space +trim_trailing_whitespace = true + +# Code files +[*.{cs,csx,vb,vbx}] +indent_size = 4 +insert_final_newline = true +charset = utf-8-bom + +# Xml project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# Xml config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct,xml,stylecop}] +indent_size = 2 + +# JSON files +[*.{json,json5}] +indent_size = 2 + +# YAML Files +[*.{yml,yaml}] +indent_size = 2 + +# Shell scripts +[*.sh] +end_of_line = lf + +[*.{cmd,bat}] +end_of_line = crlf + +# Web Files +[*.{htm,html,js,ts,css,scss,less}] +indent_size = 2 +insert_final_newline = true + +## Language conventions +# Dotnet code style settings: +[*.{cs,csx,cake,vb}] +# Avoid "this." and "Me." if not necessary +dotnet_style_qualification_for_event = false : warning +dotnet_style_qualification_for_field = false : warning +dotnet_style_qualification_for_method = false : warning +dotnet_style_qualification_for_property = false : warning + +# Use language keywords instead of framework type names for type references +dotnet_style_predefined_type_for_locals_parameters_members = true : warning +dotnet_style_predefined_type_for_member_access = true : warning + +# Expression-level preferences +dotnet_style_coalesce_expression = true : suggestion +dotnet_style_collection_initializer = true : suggestion +dotnet_style_explicit_tuple_names = true : warning +dotnet_style_null_propagation = true : suggestion +dotnet_style_object_initializer = true : suggestion +dotnet_style_require_accessibility_modifiers = always : warning + +dotnet_style_prefer_is_null_check_over_reference_equality_method = true : warning +dotnet_style_readonly_field = true : warning +dotnet_style_prefer_auto_properties = true : suggestion +dotnet_style_prefer_inferred_tuple_names = true : suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true : suggestion + +# CSharp code style settings: +[*.cs] +# Prefer "var" everywhere (Implicit and explicit types) +csharp_style_var_elsewhere = true : suggestion +csharp_style_var_for_built_in_types = true : suggestion +csharp_style_var_when_type_is_apparent = true : warning + +# Expression-Bodied members +csharp_style_expression_bodied_accessors = true : suggestion +csharp_style_expression_bodied_indexers = true : suggestion +csharp_style_expression_bodied_operators = true : suggestion +csharp_style_expression_bodied_properties = true : suggestion +# Explicitly disabled due to difference in coding style between source and tests +#csharp_style_expression_bodied_constructors = true : warning +#csharp_style_expression_bodied_methods = true : warning + +# Pattern matching +csharp_style_pattern_matching_over_as_with_null_check = true : suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true : suggestion + +# Inlined variable declarations +csharp_style_inlined_variable_declaration = true : suggestion + +# Expression-level preferences +csharp_prefer_inferred_anonymous_type_member_names = true : warning +csharp_prefer_inferred_tuple_names = true : warning +csharp_prefer_simple_default_expression = true : warning +csharp_preferred_modifier_order = public,private,protected,internal,const,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async +csharp_style_deconstructed_variable_declaration = true : warning +csharp_style_pattern_local_over_anonymous_function = true : warning + +# Null-checking preference +csharp_style_conditional_delegate_call = true : warning +csharp_style_throw_expression = true : warning + +# Code block preferences +#csharp_prefer_braces = true : suggestion # Disabled because it doesn't support no braces for control flow keywords (return, break, throw) + +## Formatting conventions +# Dotnet formatting settings: +[*.{cs,vb}] +# Organize usings +dotnet_sort_system_directives_first = true + +# CSharp formatting settings: +[*.cs] +# Newline options +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true + +# Identation options +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +# Spacing options +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false + +# Wrapping options +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false + +## Naming conventions +[*.{cs,vb}] + +# Non-private static fields are PascalCase +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style + +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected internal, private protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static + +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case + +# Constants are PascalCase +dotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style + +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.required_modifiers = const + +dotnet_naming_style.constant_style.capitalization = pascal_case + +# Static fields are camelCase and start with s_ +dotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_field_style.capitalization = camel_case +dotnet_naming_style.static_field_style.required_prefix = s_ + +# Instance fields are camelCase and start with _ +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style + +dotnet_naming_symbols.instance_fields.applicable_kinds = field + +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + +# Locals and parameters are camelCase +dotnet_naming_rule.locals_should_be_camel_case.severity = suggestion +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style + +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local +dotnet_naming_style.camel_case_style.capitalization = camel_case + +# Local functions are PascalCase +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function +dotnet_naming_style.local_function_style.capitalization = pascal_case + +# Type Parameters +dotnet_naming_style.type_parameter_style.capitalization = pascal_case +dotnet_naming_style.type_parameter_style.required_prefix = T + +dotnet_naming_rule.type_parameter_naming.symbols = type_parameter_symbol +dotnet_naming_rule.type_parameter_naming.style = type_parameter_style +dotnet_naming_rule.type_parameter_naming.severity = warning +dotnet_naming_symbols.type_parameter_symbol.applicable_kinds = type_parameter +dotnet_naming_symbols.type_parameter_symbol.applicable_accessibilities = * + +# By default, name items with PascalCase +dotnet_naming_rule.members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members +dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.all_members.applicable_kinds = * + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +## Analyzers +# IDE0002: Name can be simplified +dotnet_diagnostic.IDE0002.severity = suggestion + +# IDE0005: Remove unnecessary imports +dotnet_diagnostic.IDE0005.severity = suggestion + +# IDE1006: Naming rule violation +dotnet_diagnostic.IDE1006.severity = suggestion + +# MA0006: use String.Equals +dotnet_diagnostic.MA0006.severity = none + +# Meziantou Analyzer +MA0051.maximum_statements_per_method = 40 +MA0051.skip_local_functions = false +MA0051.maximum_lines_per_method = 60 +MA0053.public_class_should_be_sealed = true \ No newline at end of file diff --git a/src/RoyalLibrary/ConditionalIndexExtensions.cs b/src/RoyalLibrary/ConditionalIndexExtensions.cs index 592bcf7..fb754ad 100644 --- a/src/RoyalLibrary/ConditionalIndexExtensions.cs +++ b/src/RoyalLibrary/ConditionalIndexExtensions.cs @@ -6,7 +6,7 @@ namespace ByteDecoder.RoyalLibrary { /// - /// + /// /// public static class ConditionalIndexExtensions {