From 13348208c6d1b39c7fa9d21cb7c4bc729837b203 Mon Sep 17 00:00:00 2001 From: Oliver Booth Date: Sun, 27 Nov 2022 15:00:59 +0000 Subject: [PATCH] Initial commit --- .editorconfig | 213 ++++++++++++++++++++++++++++++++++++++++++++++++ .gitignore | 38 +++++++++ CONTRIBUTING.md | 43 ++++++++++ LICENSE.md | 21 +++++ README.md | 26 ++++++ banner.png | Bin 0 -> 29626 bytes icon.png | Bin 0 -> 6550 bytes 7 files changed, 341 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 banner.png create mode 100644 icon.png diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..125f2c1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,213 @@ +# All files +[*] +guidelines = 130 + +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size=4 +indent_style=space +tab_width=4 + +# New line preferences +end_of_line=crlf +insert_final_newline=true + +#### .NET Coding Conventions #### + +# Organize usings +dotnet_separate_import_directive_groups=false +dotnet_sort_system_directives_first=true + +# this. and Me. preferences +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 + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members=true:warning +dotnet_style_predefined_type_for_member_access=true:warning + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators=always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators=always_for_clarity:silent +dotnet_style_parentheses_in_other_operators=never_if_unnecessary:silent +dotnet_style_parentheses_in_relational_binary_operators=always_for_clarity:silent + +# Modifier preferences +dotnet_style_require_accessibility_modifiers=for_non_interface_members:silent + +# Expression-level preferences +dotnet_style_coalesce_expression=true:suggestion +dotnet_style_collection_initializer=true:suggestion +dotnet_style_explicit_tuple_names=true:suggestion +dotnet_style_null_propagation=true:suggestion +dotnet_style_object_initializer=true:suggestion +dotnet_style_prefer_auto_properties=true:silent +dotnet_style_prefer_compound_assignment=true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment=true:silent +dotnet_style_prefer_conditional_expression_over_return=true:silent +dotnet_style_prefer_inferred_anonymous_type_member_names=false:suggestion +dotnet_style_prefer_inferred_tuple_names=false:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method=true:suggestion +dotnet_style_prefer_simplified_interpolation=true:suggestion + +# Field preferences +dotnet_style_readonly_field=true:suggestion + +# Parameter preferences +dotnet_code_quality_unused_parameters=all:suggestion + +#### C# Coding Conventions #### + +# var preferences +csharp_style_var_when_type_is_apparent=true:warning + +# Expression-bodied members +csharp_style_expression_bodied_accessors=true:suggestion +csharp_style_expression_bodied_constructors=false:suggestion +csharp_style_expression_bodied_indexers=true:suggestion +csharp_style_expression_bodied_lambdas=true:silent +csharp_style_expression_bodied_local_functions=false:silent +csharp_style_expression_bodied_methods=false:suggestion +csharp_style_expression_bodied_operators=false:suggestion +csharp_style_expression_bodied_properties=false:suggestion + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check=true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check=true:suggestion +csharp_style_prefer_switch_expression=true:suggestion + +# Null-checking preferences +csharp_style_conditional_delegate_call=true:suggestion + +# Modifier preferences +csharp_prefer_static_local_function=true:suggestion +csharp_preferred_modifier_order=public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent + +# Code-block preferences +csharp_prefer_braces=true:suggestion +csharp_prefer_simple_using_statement=true:suggestion + +# Expression-level preferences +csharp_prefer_simple_default_expression=true:suggestion +csharp_style_deconstructed_variable_declaration=true:suggestion +csharp_style_inlined_variable_declaration=true:suggestion +csharp_style_pattern_local_over_anonymous_function=true:suggestion +csharp_style_prefer_index_operator=true:suggestion +csharp_style_prefer_range_operator=true:suggestion +csharp_style_throw_expression=true:suggestion +csharp_style_unused_value_assignment_preference=discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference=discard_variable:silent + +# 'using' directive preferences +csharp_using_directive_placement=outside_namespace:error + +#### C# Formatting Rules #### + +max_line_length=130 + +# New line preferences +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 + +# Indentation preferences +csharp_indent_block_contents=true +csharp_indent_braces=false +csharp_indent_case_contents=true +csharp_indent_case_contents_when_block=true +csharp_indent_labels=one_less_than_current +csharp_indent_switch_labels=true + +# 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=false +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 + +# Wrapping preferences +csharp_preserve_single_line_blocks=true +csharp_preserve_single_line_statements=true + +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.interface_should_be_begins_with_i.severity=suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols=interface +dotnet_naming_rule.interface_should_be_begins_with_i.style=begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity=suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols=types +dotnet_naming_rule.types_should_be_pascal_case.style=pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity=suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols=non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style=pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds=interface +dotnet_naming_symbols.interface.applicable_accessibilities=public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers= + +dotnet_naming_symbols.types.applicable_kinds=class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities=public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers= + +dotnet_naming_symbols.non_field_members.applicable_kinds=property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities=public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers= + +# Naming styles + +dotnet_naming_style.pascal_case.required_prefix= + dotnet_naming_style.pascal_case.required_suffix= + dotnet_naming_style.pascal_case.word_separator= + dotnet_naming_style.pascal_case.capitalization=pascal_case + +dotnet_naming_style.begins_with_i.required_prefix=I +dotnet_naming_style.begins_with_i.required_suffix= +dotnet_naming_style.begins_with_i.word_separator= + dotnet_naming_style.begins_with_i.capitalization=pascal_case + +# XML comment analysis is disabled due to project configuration +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA0001.md +dotnet_diagnostic.SA0001.severity = silent + +# A C# code file is missing a standard file header. +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1633.md +dotnet_diagnostic.SA1633.severity = silent + +# Consider calling ConfigureAwait on the awaited Task +# https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2007?view=vs-2019 +# https://github.com/JosefPihrt/Roslynator/blob/master/docs/analyzers/RCS1090.md +dotnet_diagnostic.CA2007.severity = silent +dotnet_diagnostic.RCS1090.severity = silent diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d9b9e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +.env +*.swp +*.*~ +project.lock.json +.DS_Store +*.pyc +nupkg/ + +# Visual Studio Code +.vscode + +# Rider +.idea + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +msbuild.log +msbuild.err +msbuild.wrn + +# Visual Studio 2015 +.vs/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..d525e32 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,43 @@ +## How you can contribute + +Contributions to this project are always welcome. If you spot a bug, or want to request a new extension method, open a new issue +or submit a pull request. + +### Pull request guidelines + +This project uses C# 10.0 language features, and adheres to StyleCop rules with some minor adjustments. +There is an `.editorconfig` included in this repository. For quick and painless pull requests, ensure that the analyzer does not +throw warnings. + +### Code style + +Below are a few pointers to which you may refer, but keep in mind this is not an exhaustive list: + +- Use C# 10.0 features where possible +- Try to ensure code is CLS-compliant. Where this is not possible, decorate methods with `CLSCompliantAttribute` and pass `false` +- Follow all .NET guidelines and coding conventions. + See https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions + and https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/ +- Make full use of XMLDoc and be thorough - but concise - with all documentation +- Ensure that no line exceeds 130 characters in length +- Do NOT include file headers in any form +- Declare `using` directives outside of namespace scope +- Avoid using exceptions for flow control where possible +- Use braces, even for single-statement bodies +- Use implicit type when the type is apparent +- Use explicit type otherwise +- Use U.S. English throughout the codebase and documentation + +When in doubt, follow .NET guidelines. + +### Tests + +When introducing a new extension method, you must ensure that you have also defined a unit test that asserts its correct behavior. +The code style guidelines and code-analysis rules apply to the `X10D.Tests` equally as much as `X10D`, although documentation may +be briefer. Refer to existing tests as a guideline. + +### Disclaimer + +In the event of a code style violation, a pull request may left open (or closed entirely) without merging. Keep in mind this does +not mean the theory or implementation of the method is inherently bad or rejected entirely (although if this is the case, it will +be outlined) diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..ed7c8c7 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-2022 Oliver Booth + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4377cd5 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +

+

+GitHub Workflow Status +GitHub Issues +MIT License +

+ +### About +VP# is a modern .NET wrapper for the Virtual Paradise SDK which introduces a cleaner, more modern, and more async API. + +*(I'm also [dogfooding](https://www.pcmag.com/encyclopedia/term/dogfooding) this library, so there's that.)* + +## Installation +### NuGet installation +```ps +Install-Package VpSharp -Version 0.1.0 +``` + +### Manual installation +Download the [latest release](https://github.com/oliverbooth/VpSharp/releases/latest) from this repository and adding a direct assembly reference for your chosen platform. + +## Contributing +Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md). + +## License +VP# is released under the MIT License. See [here](https://github.com/oliverbooth/VpSharp/blob/master/LICENSE.md) for more details. diff --git a/banner.png b/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..3fae23dcb0db85d031b5648350e2a81eb0c0193d GIT binary patch literal 29626 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 literal 0 HcmV?d00001 diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c945c8082d645f9d7e7a1262966b0c2327ee2331 GIT binary patch literal 6550 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