From 9c50fe4984c346cec825c2875e1ba81ec385f5b1 Mon Sep 17 00:00:00 2001 From: "D. Moonfire" Date: Tue, 5 Mar 2024 22:15:38 -0600 Subject: [PATCH] feat: added optional dotnet formatting --- TASKS.md | 6 +++ flake.nix | 8 +++ src/configs/editorconfig.nix | 102 ++++++++++++++++++++++++++++++++++- src/configs/treefmt.nix | 8 ++- 4 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 TASKS.md diff --git a/TASKS.md b/TASKS.md new file mode 100644 index 0000000..b158476 --- /dev/null +++ b/TASKS.md @@ -0,0 +1,6 @@ +# Tasks + +- [ ] Need to exclude the generated files from Prettier +- [ ] Include the C# editor config setup +- [ ] Add .direnv into `.gitignore` +- [ ] Add `*.mjs` to Prettier diff --git a/flake.nix b/flake.nix index d7d0683..4003f1e 100644 --- a/flake.nix +++ b/flake.nix @@ -29,6 +29,7 @@ , pkgs , conform ? { } , contributorCovenant ? { } + , dotnet ? { } , developerCertificateOfOrigin ? { } , copyright ? null , mit ? { } @@ -42,6 +43,7 @@ conformDefaults = { scopes = [ ]; }; contributorCovenantDefaults = { enable = false; }; developerCertificateOfOriginDefaults = { enable = false; }; + dotnetDefaults = { enable = false; }; prettierDefaults = { proseWrap = "preserve"; }; rustDefaults = { enable = false; }; licenseDefaults = { enable = false; filename = "LICENSE.md"; }; @@ -62,6 +64,7 @@ creativeCommonsAttributionNonCommercialShareAlike = licenseDefaults // creativeCommonsAttributionNonCommercialShareAlike; creativeCommonsAttributionShareAlike = licenseDefaults // creativeCommonsAttributionShareAlike; developerCertificateOfOrigin = developerCertificateOfOriginDefaults // developerCertificateOfOrigin; + dotnet = dotnetDefaults // dotnet; mit = licenseDefaults // mit; prettier = prettierDefaults // prettier; rust = rustDefaults // rust; @@ -72,6 +75,11 @@ pkgs.lefthook pkgs.treefmt pkgs.conform + pkgs.nodePackages.prettier + pkgs.nixpkgs-fmt + ] + ++ pkgs.lib.lists.optional (dotnet // dotnetDefaults).enable [ + pkgs.csharpier ]; shellHook = '' diff --git a/src/configs/editorconfig.nix b/src/configs/editorconfig.nix index 572c278..20eb654 100644 --- a/src/configs/editorconfig.nix +++ b/src/configs/editorconfig.nix @@ -1,4 +1,4 @@ -inputs: +inputs @ { pkgs, ... }: let data = { root = true; @@ -14,6 +14,93 @@ let max_line_length = 80; tab_width = 4; curly_bracket_next_line = true; + } + // pkgs.lib.attrsets.optionalAttrs inputs.dotnet.enable { + csharp_new_line_before_members_in_object_initializers = false; + csharp_preferred_modifier_order = "public, override, protected, internal, file, new, virtual, abstract, private, sealed, readonly, static, extern, unsafe, volatile, async, required:suggestion"; + csharp_preserve_single_line_blocks = true; + csharp_preserve_single_line_statements = false; + csharp_space_after_cast = false; + csharp_style_var_elsewhere = "false:hint"; + csharp_style_var_for_built_in_types = "false:hint"; + csharp_style_var_when_type_is_apparent = "true:hint"; + dotnet_style_predefined_type_for_locals_parameters_members = "true:hint"; + dotnet_style_predefined_type_for_member_access = "true:hint"; + dotnet_style_qualification_for_event = "true:hint"; + dotnet_style_qualification_for_field = "true:hint"; + dotnet_style_qualification_for_method = "true:hint"; + dotnet_style_qualification_for_property = "true:hint"; + dotnet_style_require_accessibility_modifiers = "for_non_interface_members:hint"; + resharper_alignment_tab_fill_style = "optimal_fill"; + resharper_apply_on_completion = true; + resharper_blank_lines_after_control_transfer_statements = 1; + resharper_blank_lines_around_single_line_auto_property = 1; + resharper_blank_lines_around_single_line_property = 1; + resharper_blank_lines_before_block_statements = 1; + resharper_blank_lines_before_control_transfer_statements = 1; + resharper_blank_lines_before_single_line_comment = 1; + resharper_blank_lines_between_using_groups = 1; + resharper_braces_for_for = "required"; + resharper_braces_for_foreach = "required"; + resharper_braces_for_ifelse = "required"; + resharper_braces_for_while = "required"; + resharper_can_use_global_alias = false; + resharper_check_namespace_highlighting = "none"; + resharper_convert_to_auto_property_highlighting = "none"; + resharper_csharp_blank_lines_around_single_line_field = 1; + resharper_csharp_blank_lines_around_single_line_invocable = 1; + resharper_csharp_empty_block_style = "together_same_line"; + resharper_csharp_indent_style = "tab"; + resharper_csharp_insert_final_newline = true; + resharper_csharp_keep_blank_lines_in_code = 1; + resharper_csharp_keep_blank_lines_in_declarations = 1; + resharper_csharp_max_line_length = 100; + resharper_csharp_new_line_before_while = true; + resharper_csharp_use_indent_invocation_rpar = true; + resharper_csharp_wrap_extends_list_style = "chop_if_long"; + resharper_csharp_wrap_parameters_style = "chop_if_long"; + resharper_css_insert_final_newline = false; + resharper_enforce_line_ending_style = true; + resharper_html_insert_final_newline = false; + resharper_indent_nested_fixed_stmt = true; + resharper_js_indent_style = "spaces"; + resharper_js_insert_final_newline = true; + resharper_js_keep_blank_lines_in_code = 1; + resharper_js_stick_comment = false; + resharper_js_use_indent_from_vs = false; + resharper_js_wrap_before_binary_opsign = true; + resharper_js_wrap_chained_method_calls = "chop_if_long"; + resharper_keep_blank_lines_between_declarations = 1; + resharper_localizable_element_highlighting = "none"; + resharper_min_blank_lines_after_imports = 1; + resharper_place_attribute_on_same_line = false; + resharper_place_constructor_initializer_on_same_line = false; + resharper_place_expr_property_on_single_line = true; + resharper_place_simple_initializer_on_single_line = false; + resharper_place_type_constraints_on_same_line = false; + resharper_protobuf_insert_final_newline = false; + resharper_qualified_using_at_nested_scope = true; + resharper_redundant_comma_in_attribute_list_highlighting = "none"; + resharper_redundant_comma_in_enum_declaration_highlighting = "none"; + resharper_redundant_comma_in_initializer_highlighting = "none"; + resharper_resx_insert_final_newline = false; + resharper_space_within_single_line_array_initializer_braces = true; + resharper_string_compare_to_is_culture_specific_highlighting = "none"; + resharper_string_index_of_is_culture_specific_1_highlighting = "none"; + resharper_use_indents_from_main_language_in_file = false; + resharper_use_null_propagation_highlighting = "none"; + resharper_use_object_or_collection_initializer_highlighting = "hint"; + resharper_use_string_interpolation_highlighting = "hint"; + resharper_vb_insert_final_newline = false; + resharper_wrap_after_declaration_lpar = true; + resharper_wrap_after_invocation_lpar = true; + resharper_wrap_before_extends_colon = true; + resharper_wrap_before_first_type_parameter_constraint = true; + resharper_wrap_before_type_parameter_langle = true; + resharper_xml_insert_final_newline = false; + resharper_xmldoc_indent_child_elements = "ZeroIndent"; + resharper_xmldoc_indent_text = "ZeroIndent"; + resharper_xmldoc_insert_final_newline = false; }; "*.md" = { @@ -34,6 +121,19 @@ let indent_style = "unset"; indent_size = "unset"; }; + } + // pkgs.lib.attrsets.optionalAttrs inputs.dotnet.enable { + "*.{appxmanifest,build,config,csproj,dbml,discomap,dtd,jsproj,lsproj,njsproj,nuspec,proj,props,resw,resx,StyleCop,targets,tasks,vbproj,xml,xsd}]" = { + indent_size = 2; + indent_style = "space"; + tab_width = 2; + }; + + "*.cs" = { + indent_style = "space"; + indent_size = 4; + tab_width = 4; + }; }; in { diff --git a/src/configs/treefmt.nix b/src/configs/treefmt.nix index 49b1949..303ada4 100644 --- a/src/configs/treefmt.nix +++ b/src/configs/treefmt.nix @@ -1,4 +1,4 @@ -inputs @ { pkgs, rust, ... }: +inputs @ { pkgs, dotnet, rust, ... }: let data = { formatter = { @@ -25,6 +25,12 @@ let excludes = [ "**.min.js" ]; }; } + // pkgs.lib.attrsets.optionalAttrs dotnet.enable { + csharpier = { + command = "${pkgs.csharpier}/bin/dotnet-csharpier"; + includes = [ "*.cs" ]; + }; + } // pkgs.lib.attrsets.optionalAttrs rust.enable { rust = { command = "rustfmt";