Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply some common linter rules #5

Merged
merged 9 commits into from
Jun 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 157 additions & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
analyzer:
strong-mode:
implicit-dynamic: false
errors:
# treat missing required parameters as a warning (not a hint)
missing_required_param: warning
# treat missing returns as a warning (not a hint)
missing_return: warning
# allow having TODOs in the code
todo: ignore
# Ignore analyzer hints for updating pubspecs when using Future or
# Stream and not importing dart:async
# Please see https://github.com/flutter/flutter/pull/24528 for details.
sdk_version_async_exported_from_core: ignore
exclude:
- 'bin/cache/**'
# the following two are relative to the stocks example and the flutter package respectively
# see https://github.com/dart-lang/sdk/issues/28463
- 'lib/i18n/stock_messages_*.dart'
- 'lib/src/http/**'

linter:
rules:
# these rules are documented on and in the same order as
# the Dart Lint rules page to make maintenance easier
# https://github.com/dart-lang/linter/blob/master/example/all.yaml
- always_declare_return_types
- always_put_control_body_on_new_line
# - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
- always_require_non_null_named_parameters
- annotate_overrides
# - avoid_annotating_with_dynamic # conflicts with always_specify_types
- avoid_as
# - avoid_bool_literals_in_conditional_expressions # not yet tested
# - avoid_catches_without_on_clauses # we do this commonly
# - avoid_catching_errors # we do this commonly
- avoid_classes_with_only_static_members
# - avoid_double_and_int_checks # only useful when targeting JS runtime
- avoid_empty_else
- avoid_field_initializers_in_const_classes
- avoid_function_literals_in_foreach_calls
# - avoid_implementing_value_types # not yet tested
- avoid_init_to_null
# - avoid_js_rounded_ints # only useful when targeting JS runtime
- avoid_null_checks_in_equality_operators
# - avoid_positional_boolean_parameters # not yet tested
# - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356)
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
# - avoid_returning_null # there are plenty of valid reasons to return null
# - avoid_returning_null_for_future # not yet tested
- avoid_returning_null_for_void
# - avoid_returning_this # there are plenty of valid reasons to return this
# - avoid_setters_without_getters # not yet tested
# - avoid_shadowing_type_parameters # not yet tested
# - avoid_single_cascade_in_expression_statements # not yet tested
- avoid_slow_async_io
- avoid_types_as_parameter_names
# - avoid_types_on_closure_parameters # conflicts with always_specify_types
- avoid_unused_constructor_parameters
- avoid_void_async
- await_only_futures
- camel_case_types
- cancel_subscriptions
# - cascade_invocations # not yet tested
# - close_sinks # not reliable enough
# - comment_references # blocked on https://github.com/flutter/flutter/issues/20765
# - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204
- control_flow_in_finally
# - curly_braces_in_flow_control_structures # not yet tested
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
# - file_names # not yet tested
- flutter_style_todos
- hash_and_equals
- implementation_imports
# - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811
- iterable_contains_unrelated_type
# - join_return_with_assignment # not yet tested
- library_names
- library_prefixes
# - lines_longer_than_80_chars # not yet tested
- list_remove_unrelated_type
# - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181
- no_adjacent_strings_in_list
- no_duplicate_case_values
- non_constant_identifier_names
# - null_closures # not yet tested
# - omit_local_variable_types # opposite of always_specify_types
# - one_member_abstracts # too many false positives
# - only_throw_errors # https://github.com/flutter/flutter/issues/5792
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
# - parameter_assignments # we do this commonly
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
# - prefer_constructors_over_static_methods # not yet tested
- prefer_contains
- prefer_equal_for_default_values
# - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods
- prefer_final_fields
- prefer_final_locals
- prefer_foreach
# - prefer_function_declarations_over_variables # not yet tested
- prefer_generic_function_type_aliases
- prefer_initializing_formals
# - prefer_int_literals # not yet tested
# - prefer_interpolation_to_compose_strings # not yet tested
- prefer_is_empty
- prefer_is_not_empty
- prefer_iterable_whereType
# - prefer_mixin # https://github.com/dart-lang/language/issues/32
# - prefer_null_aware_operators # disable until NNBD, see https://github.com/flutter/flutter/pull/32711#issuecomment-492930932
- prefer_single_quotes
- prefer_typing_uninitialized_variables
- prefer_void_to_null
# - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml
- recursive_getters
- slash_for_doc_comments
- sort_pub_dependencies
# - super_goes_last # no longer needed w/ Dart 2
- test_types_in_equals
- throw_in_finally
# - type_annotate_public_apis # subset of always_specify_types
- type_init_formals
# - unawaited_futures # too many false positives
# - unnecessary_await_in_return # not yet tested
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_getters_setters
# - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_in_if_null_operators
- unnecessary_overrides
- unnecessary_parenthesis
- unnecessary_statements
- unnecessary_this
- unrelated_type_equality_checks
# - use_function_type_syntax_for_parameters # not yet tested
- use_rethrow_when_possible
# - use_setters_to_change_properties # not yet tested
# - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182
# - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review
- valid_regexps
# - void_checks # not yet tested
2 changes: 1 addition & 1 deletion lib/fl_chart_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class FlChartWidget extends StatefulWidget {
@required this.flChart,
}) : super(key: key) {
if (flChart == null) {
throw Exception("flChart might not be null");
throw Exception('flChart might not be null');
}
}

Expand Down
8 changes: 4 additions & 4 deletions lib/src/chart/bar_chart/bar_chart_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ class BarChartData extends FlAxisChartData {
double maxY,
) {
barGroups.forEach((barData) {
if (barData.barRods == null || barData.barRods.length <= 0) {
throw Exception("barRods could not be null or empty");
if (barData.barRods == null || barData.barRods.isEmpty) {
throw Exception('barRods could not be null or empty');
}
});

if (barGroups.length > 0) {
if (barGroups.isNotEmpty) {
var canModifyMinX = false;
if (minX == null) {
minX = barGroups[0].x.toDouble();
Expand Down Expand Up @@ -150,7 +150,7 @@ class BarChartGroupData {
/// calculates the whole width of our group,
/// by adding all rod's width and group space * rods count.
double get width {
if (barRods.length == 0) {
if (barRods.isEmpty) {
return 0;
}

Expand Down
23 changes: 12 additions & 11 deletions lib/src/chart/bar_chart/bar_chart_painter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@ class BarChartPainter extends FlAxisChartPainter {
}

@override
void paint(Canvas canvas, Size viewSize) {
super.paint(canvas, viewSize);
void paint(Canvas canvas, Size size) {
super.paint(canvas, size);

if (data.barGroups.length == 0) {
if (data.barGroups.isEmpty) {
return;
}

List<double> groupsX = calculateGroupsX(viewSize, data.barGroups, data.alignment);
drawBars(canvas, viewSize, groupsX);
drawTitles(canvas, viewSize, groupsX);
List<double> groupsX = calculateGroupsX(size, data.barGroups, data.alignment);
drawBars(canvas, size, groupsX);
drawTitles(canvas, size, groupsX);
}

/// this method calculates the x of our showing groups,
Expand Down Expand Up @@ -199,13 +199,13 @@ class BarChartPainter extends FlAxisChartPainter {
String text =
data.titlesData.getVerticalTitles(data.gridData.verticalInterval * verticalCounter);

TextSpan span = new TextSpan(style: data.titlesData.verticalTitlesTextStyle, text: text);
TextPainter tp = new TextPainter(
TextSpan span = TextSpan(style: data.titlesData.verticalTitlesTextStyle, text: text);
TextPainter tp = TextPainter(
text: span, textAlign: TextAlign.center, textDirection: TextDirection.ltr);
tp.layout(maxWidth: getExtraNeededHorizontalSpace());
x -= tp.width + data.titlesData.verticalTitleMargin;
y -= (tp.height / 2);
tp.paint(canvas, new Offset(x, y));
tp.paint(canvas, Offset(x, y));

verticalCounter++;
}
Expand All @@ -215,8 +215,8 @@ class BarChartPainter extends FlAxisChartPainter {
groupsX.asMap().forEach((int index, double x) {
String text = data.titlesData.getHorizontalTitles(index.toDouble());

TextSpan span = new TextSpan(style: data.titlesData.horizontalTitlesTextStyle, text: text);
TextPainter tp = new TextPainter(
TextSpan span = TextSpan(style: data.titlesData.horizontalTitlesTextStyle, text: text);
TextPainter tp = TextPainter(
text: span, textAlign: TextAlign.center, textDirection: TextDirection.ltr);
tp.layout();

Expand Down Expand Up @@ -259,6 +259,7 @@ class BarChartPainter extends FlAxisChartPainter {
/// calculate left offset for draw the chart,
/// maybe we want to show both left and right titles,
/// then just the left titles will effect on this function.
@override
double getLeftOffsetDrawSize() {
double parentNeeded = super.getLeftOffsetDrawSize();
if (data.titlesData.show && data.titlesData.showVerticalTitles) {
Expand Down
8 changes: 4 additions & 4 deletions lib/src/chart/base/fl_axis_chart/fl_axis_chart_painter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ abstract class FlAxisChartPainter<D extends FlAxisChartData> extends FlChartPain
Paint gridPaint;

FlAxisChartPainter(this.data) : super(data) {
gridPaint = new Paint()..style = PaintingStyle.fill;
gridPaint = Paint()..style = PaintingStyle.fill;
}

@override
void paint(Canvas canvas, Size viewSize) {
super.paint(canvas, viewSize);
drawGrid(canvas, viewSize);
void paint(Canvas canvas, Size size) {
super.paint(canvas, size);
drawGrid(canvas, size);
}

void drawGrid(Canvas canvas, Size viewSize) {
Expand Down
10 changes: 3 additions & 7 deletions lib/src/chart/base/fl_chart/fl_chart_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ class FlChartData {
FlChartData({
this.borderData,
}) {
if (borderData == null) {
borderData = FlBorderData();
}
borderData ??= FlBorderData();
}
}

Expand All @@ -28,13 +26,11 @@ class FlBorderData {
this.show = true,
this.border,
}) {
if (border == null) {
border = Border.all(
border ??= Border.all(
color: Colors.black,
width: 1.0,
style: BorderStyle.solid,
);
}
}
}

Expand All @@ -46,7 +42,7 @@ class FlBorderData {
typedef GetTitleFunction = String Function(double value);

String defaultGetTitle(double value) {
return "${value.toInt()}";
return '${value.toInt()}';
}

/// This class is responsible to hold data about showing titles.
Expand Down
4 changes: 2 additions & 2 deletions lib/src/chart/base/fl_chart/fl_chart_painter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ abstract class FlChartPainter<D extends FlChartData> extends CustomPainter {
}

@override
void paint(Canvas canvas, Size viewSize) {
drawViewBorder(canvas, viewSize);
void paint(Canvas canvas, Size size) {
drawViewBorder(canvas, size);
}

void drawViewBorder(Canvas canvas, Size viewSize) {
Expand Down
6 changes: 3 additions & 3 deletions lib/src/chart/line_chart/line_chart_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ class LineChartData extends FlAxisChartData {
double maxY,
) {
lineBarsData.forEach((lineBarChart) {
if (lineBarChart.spots == null || lineBarChart.spots.length <= 0) {
throw Exception("spots could not be null or empty");
if (lineBarChart.spots == null || lineBarChart.spots.isEmpty) {
throw Exception('spots could not be null or empty');
}
});
if (lineBarsData.length > 0) {
if (lineBarsData.isNotEmpty) {
var canModifyMinX = false;
if (minX == null) {
minX = lineBarsData[0].spots[0].x;
Expand Down
13 changes: 7 additions & 6 deletions lib/src/chart/line_chart/line_chart_painter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class LineChartPainter extends FlAxisChartPainter {
@override
void paint(Canvas canvas, Size viewSize) {
super.paint(canvas, viewSize);
if (data.lineBarsData.length == 0) {
if (data.lineBarsData.isEmpty) {
return;
}

Expand Down Expand Up @@ -245,13 +245,13 @@ class LineChartPainter extends FlAxisChartPainter {
String text =
data.titlesData.getVerticalTitles(data.gridData.verticalInterval * verticalCounter);

TextSpan span = new TextSpan(style: data.titlesData.verticalTitlesTextStyle, text: text);
TextPainter tp = new TextPainter(
TextSpan span = TextSpan(style: data.titlesData.verticalTitlesTextStyle, text: text);
TextPainter tp = TextPainter(
text: span, textAlign: TextAlign.center, textDirection: TextDirection.ltr);
tp.layout(maxWidth: getExtraNeededHorizontalSpace());
x -= tp.width + data.titlesData.verticalTitleMargin;
y -= (tp.height / 2);
tp.paint(canvas, new Offset(x, y));
tp.paint(canvas, Offset(x, y));

verticalCounter++;
}
Expand All @@ -267,8 +267,8 @@ class LineChartPainter extends FlAxisChartPainter {
String text = data.titlesData
.getHorizontalTitles(data.gridData.horizontalInterval * horizontalCounter);

TextSpan span = new TextSpan(style: data.titlesData.horizontalTitlesTextStyle, text: text);
TextPainter tp = new TextPainter(
TextSpan span = TextSpan(style: data.titlesData.horizontalTitlesTextStyle, text: text);
TextPainter tp = TextPainter(
text: span, textAlign: TextAlign.center, textDirection: TextDirection.ltr);
tp.layout();

Expand Down Expand Up @@ -313,6 +313,7 @@ class LineChartPainter extends FlAxisChartPainter {
/// calculate left offset for draw the chart,
/// maybe we want to show both left and right titles,
/// then just the left titles will effect on this function.
@override
double getLeftOffsetDrawSize() {
double parentNeeded = super.getLeftOffsetDrawSize();
if (data.titlesData.show && data.titlesData.showVerticalTitles) {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/chart/pie_chart/pie_chart_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class PieChartSectionData {
this.showTitle = true,
this.titleStyle =
const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold),
this.title = "1",
this.title = '1',
this.titlePositionPercentageOffset = 0.5,
});
}
Loading