Skip to content

Commit

Permalink
ARROW-8882: [C#] Add .editorconfig to C# code
Browse files Browse the repository at this point in the history
Adding an `.editorconfig` using the rules from dotnet/runtime repo. See:

* https://github.com/dotnet/runtime/blob/master/docs/coding-guidelines/coding-style.md
* https://github.com/dotnet/runtime/blob/master/.editorconfig

Violating these rules won't fail the build, but Visual Studio will respect these rules when formatting the code and make suggestions.

The bulk of the violations were `var` usages. There was one unnecessary usage of `this.`. And the rest were naming static fields with `s_`. In `BitUtility.cs`, I made a slight optimization using the pattern recognized by dotnet/roslyn#24621 instead of prefixing the fields with `s_`.

Tagging anyone who has contributed to the C# library (please let me know if I missed anyone):
@chutchinson @zgramana @nhustler @HashidaTKS @abbotware @pgovind @stephentoub

Closes #7246 from eerhardt/Editorconfig

Authored-by: Eric Erhardt <[email protected]>
Signed-off-by: Eric Erhardt <[email protected]>
  • Loading branch information
eerhardt committed May 26, 2020
1 parent f16f76a commit 97d4678
Show file tree
Hide file tree
Showing 32 changed files with 342 additions and 171 deletions.
169 changes: 169 additions & 0 deletions csharp/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

root = true

# Default settings:
# A newline ending every file
# Use 4 spaces as indentation
[*]
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

# C# files
[*.cs]
# 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_case_contents_when_block = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current

# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion

# 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

# Types: use keywords instead of BCL types, and permit var only when the type is clear
csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = false:none
csharp_style_var_elsewhere = false:suggestion
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 have s_ prefix
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_symbols.static_fields.applicable_accessibilities = private, internal, private_protected
dotnet_naming_style.static_prefix_style.required_prefix = s_
dotnet_naming_style.static_prefix_style.capitalization = camel_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
csharp_using_directive_placement = outside_namespace:suggestion
dotnet_sort_system_directives_first = true
csharp_prefer_braces = true:refactoring
csharp_preserve_single_line_blocks = true:none
csharp_preserve_single_line_statements = false:none
csharp_prefer_static_local_function = true:suggestion
csharp_prefer_simple_using_statement = false:none
csharp_style_prefer_switch_expression = true:suggestion

# Code quality
dotnet_style_readonly_field = true:suggestion
dotnet_code_quality_unused_parameters = non_public:suggestion

# 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
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_auto_properties = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:refactoring
dotnet_style_prefer_conditional_expression_over_return = true:refactoring
csharp_prefer_simple_default_expression = true:suggestion

# Expression-bodied members
csharp_style_expression_bodied_methods = true:refactoring
csharp_style_expression_bodied_constructors = true:refactoring
csharp_style_expression_bodied_operators = true:refactoring
csharp_style_expression_bodied_properties = true:refactoring
csharp_style_expression_bodied_indexers = true:refactoring
csharp_style_expression_bodied_accessors = true:refactoring
csharp_style_expression_bodied_lambdas = true:refactoring
csharp_style_expression_bodied_local_functions = true:refactoring

# 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

# Other features
csharp_style_prefer_index_operator = false:none
csharp_style_prefer_range_operator = false:none
csharp_style_pattern_local_over_anonymous_function = false:none

# 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

# Xml project files
[*.{csproj,props,targets}]
indent_size = 2
charset = utf-8
4 changes: 4 additions & 0 deletions csharp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,10 @@ Build from the Apache Arrow project root.

All build artifacts are placed in the **artifacts** folder in the project root.

# Coding Style

This project follows the coding style specified in [Coding Style](https://github.com/dotnet/runtime/blob/master/docs/coding-guidelines/coding-style.md).

# Updating FlatBuffers code

See https://google.github.io/flatbuffers/flatbuffers_guide_use_java_c-sharp.html for how to get the `flatc` executable.
Expand Down
12 changes: 6 additions & 6 deletions csharp/src/Apache.Arrow/Arrays/BinaryArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public TArray Build(MemoryAllocator allocator = default)
{
ValueOffsets.Append(Offset);

var validityBuffer = NullCount > 0
ArrowBuffer validityBuffer = NullCount > 0
? ValidityBuffer.Build(allocator).ValueBuffer
: ArrowBuffer.Empty;

Expand Down Expand Up @@ -114,14 +114,14 @@ public TBuilder Append(ReadOnlySpan<byte> span)

public TBuilder AppendRange(IEnumerable<byte[]> values)
{
foreach (var arr in values)
foreach (byte[] arr in values)
{
if (arr == null)
{
AppendNull();
continue;
}
var len = ValueBuffer.Length;
int len = ValueBuffer.Length;
ValueOffsets.Append(Offset);
ValueBuffer.Append(arr);
ValidityBuffer.Append(true);
Expand All @@ -137,9 +137,9 @@ public TBuilder AppendRange(IEnumerable<byte> values)
{
return AppendNull();
}
var len = ValueBuffer.Length;
int len = ValueBuffer.Length;
ValueBuffer.AppendRange(values);
var valOffset = ValueBuffer.Length - len;
int valOffset = ValueBuffer.Length - len;
ValueOffsets.Append(Offset);
Offset += valOffset;
ValidityBuffer.Append(true);
Expand Down Expand Up @@ -225,7 +225,7 @@ public int GetValueLength(int index)
return 0;
}

var offsets = ValueOffsets;
ReadOnlySpan<int> offsets = ValueOffsets;
return offsets[index + 1] - offsets[index];
}

Expand Down
14 changes: 7 additions & 7 deletions csharp/src/Apache.Arrow/Arrays/BooleanArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ private Builder NullableAppend(bool? value)

public Builder Append(ReadOnlySpan<bool> span)
{
foreach (var value in span)
foreach (bool value in span)
{
Append(value);
}
Expand All @@ -71,7 +71,7 @@ public Builder Append(ReadOnlySpan<bool> span)

public Builder AppendRange(IEnumerable<bool> values)
{
foreach (var value in values)
foreach (bool value in values)
{
Append(value);
}
Expand All @@ -85,7 +85,7 @@ public Builder AppendNull()

public BooleanArray Build(MemoryAllocator allocator = default)
{
var validityBuffer = NullCount > 0
ArrowBuffer validityBuffer = NullCount > 0
? ValidityBuffer.Build(allocator)
: ArrowBuffer.Empty;

Expand Down Expand Up @@ -154,10 +154,10 @@ public Builder Swap(int i, int j)
{
CheckIndex(i);
CheckIndex(j);
var bi = BitUtility.GetBit(ValueBuffer.Span, i);
var biValid = BitUtility.GetBit(ValidityBuffer.Span, i);
var bj = BitUtility.GetBit(ValueBuffer.Span, j);
var bjValid = BitUtility.GetBit(ValidityBuffer.Span, j);
bool bi = BitUtility.GetBit(ValueBuffer.Span, i);
bool biValid = BitUtility.GetBit(ValidityBuffer.Span, i);
bool bj = BitUtility.GetBit(ValueBuffer.Span, j);
bool bjValid = BitUtility.GetBit(ValidityBuffer.Span, j);
BitUtility.SetBit(ValueBuffer.Span, i, bj);
BitUtility.SetBit(ValidityBuffer.Span, i, bjValid);
BitUtility.SetBit(ValueBuffer.Span, j, bi);
Expand Down
2 changes: 1 addition & 1 deletion csharp/src/Apache.Arrow/Arrays/Date32Array.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public Date32Array(ArrayData data)

public DateTimeOffset? GetDate(int index)
{
var value = GetValue(index);
int? value = GetValue(index);

if (!value.HasValue)
{
Expand Down
2 changes: 1 addition & 1 deletion csharp/src/Apache.Arrow/Arrays/Date64Array.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public Date64Array(ArrayData data)

public DateTimeOffset? GetDate(int index)
{
var value = GetValue(index);
long? value = GetValue(index);

if (!value.HasValue)
{
Expand Down
4 changes: 2 additions & 2 deletions csharp/src/Apache.Arrow/Arrays/ListArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public ListArray Build(MemoryAllocator allocator = default)
{
Append();

var validityBuffer = NullCount > 0
ArrowBuffer validityBuffer = NullCount > 0
? ValidityBufferBuilder.Build(allocator).ValueBuffer
: ArrowBuffer.Empty;

Expand Down Expand Up @@ -166,7 +166,7 @@ public int GetValueLength(int index)
return 0;
}

var offsets = ValueOffsets;
ReadOnlySpan<int> offsets = ValueOffsets;
return offsets[index + 1] - offsets[index];
}

Expand Down
6 changes: 3 additions & 3 deletions csharp/src/Apache.Arrow/Arrays/PrimitiveArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ protected PrimitiveArray(ArrayData data)

public IList<T?> ToList(bool includeNulls = false)
{
var span = Values;
ReadOnlySpan<T> span = Values;
var list = new List<T?>(span.Length);

for (var i = 0; i < span.Length; i++)
for (int i = 0; i < span.Length; i++)
{
var value = GetValue(i);
T? value = GetValue(i);

if (value.HasValue)
{
Expand Down
10 changes: 5 additions & 5 deletions csharp/src/Apache.Arrow/Arrays/PrimitiveArrayBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public TBuilder Append(TFrom value)
public TBuilder Append(ReadOnlySpan<TFrom> span)
{
ArrayBuilder.Reserve(span.Length);
foreach (var value in span)
foreach (TFrom value in span)
{
Append(value);
}
Expand Down Expand Up @@ -139,15 +139,15 @@ public TBuilder Append(T value)

public TBuilder Append(ReadOnlySpan<T> span)
{
var len = ValueBuffer.Length;
int len = ValueBuffer.Length;
ValueBuffer.Append(span);
ValidityBuffer.AppendRange(Enumerable.Repeat(true, ValueBuffer.Length - len));
return Instance;
}

public TBuilder AppendRange(IEnumerable<T> values)
{
var len = ValueBuffer.Length;
int len = ValueBuffer.Length;
ValueBuffer.AppendRange(values);
ValidityBuffer.AppendRange(Enumerable.Repeat(true, ValueBuffer.Length - len));
return Instance;
Expand Down Expand Up @@ -177,7 +177,7 @@ public TBuilder Set(int index, T value)

public TBuilder Swap(int i, int j)
{
var x = ValueBuffer.Span[i];
T x = ValueBuffer.Span[i];
ValueBuffer.Span[i] = ValueBuffer.Span[j];
ValueBuffer.Span[j] = x;
ValidityBuffer.Swap(i, j);
Expand All @@ -186,7 +186,7 @@ public TBuilder Swap(int i, int j)

public TArray Build(MemoryAllocator allocator = default)
{
var validityBuffer = NullCount > 0
ArrowBuffer validityBuffer = NullCount > 0
? ValidityBuffer.Build(allocator).ValueBuffer
: ArrowBuffer.Empty;

Expand Down
6 changes: 3 additions & 3 deletions csharp/src/Apache.Arrow/Arrays/StringArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ public Builder Append(string value, Encoding encoding = null)
return AppendNull();
}
encoding = encoding ?? DefaultEncoding;
var span = encoding.GetBytes(value);
byte[] span = encoding.GetBytes(value);
return Append(span.AsSpan());
}

public Builder AppendRange(IEnumerable<string> values, Encoding encoding = null)
{
foreach (var value in values)
foreach (string value in values)
{
Append(value, encoding);
}
Expand All @@ -74,7 +74,7 @@ public string GetString(int index, Encoding encoding = default)
{
encoding = encoding ?? DefaultEncoding;

var bytes = GetBytes(index);
ReadOnlySpan<byte> bytes = GetBytes(index);

if (bytes == default)
{
Expand Down
Loading

0 comments on commit 97d4678

Please sign in to comment.