pyramid_lint 0.1.0 copy "pyramid_lint: ^0.1.0" to clipboard
pyramid_lint: ^0.1.0 copied to clipboard

pyramid_lint introduces a set of additional lints and fixes to enforce a consistent coding style, prevent common mistakes and enhance code readability.

Pyramid Lint #

pyramid_lint introduces a set of additional lints and fixes to enforce a consistent coding style, prevent common mistakes and enhance code readability using custom_lint.

Table of contents #

Installation #

Run the following command to add custom_lint and pyramid_lint to your project's dev dependencies:

dart pub add --dev custom_lint pyramid_lint

Enable custom_lint in your analysis_options.yaml file:

analyzer:
  plugins:
    - custom_lint

Configuration #

By default, all lints are enabled. To disable a specific lint, add the following to your analysis_options.yaml file:

custom_lint:
  rules:
    - specific_lint_rule: false # disable specific_lint_rule

To disable all lints and only enable the one you want, edit your analysis_options.yaml file as below:

custom_lint:
  enable_all_lint_rules: false # disable all lints
  rules:
    - specific_lint_rule # enable specific_lint_rule

Some lints have additional configuration options. To configure a lint, follow the example below:

custom_lint:
  rules:
    - configurable_lint_rule:
      option1: value1
      option2: value2

Dart lints #

avoid_empty_block #

Empty block usually indicates a missing implementation.

Bad

void doSomething() {

}

Good

void doSomething() {
  actuallyDoSomething();
}

void doSomething() {}
  // TODO: implement doSomething
}

prefer_declaring_const_constructor #

Constructors of classes with only final fields should be declared as const constructors when possible.

Bad

class Point {
  final double x;
  final double y;

  Point(this.x, this.y);

  Point.origin()
      : x = 0,
        y = 0;
}

Good

class Point {
  final double x;
  final double y;

  const Point(this.x, this.y);

  const Point.origin()
      : x = 0,
        y = 0;
}

Fix

prefer_declaring_const_constructor

prefer_declaring_parameter_name #

Not declaring parameter name decreases code readability and the IDEs code completion will not be able to suggest the parameter name.

Bad

typedef ItemBuilder = Widget Function(BuildContext, int);

Good

typedef ItemBuilder = Widget Function(BuildContext context, int index);

prefer_immediate_return #

Declaring a variable to return it on the next line is unnecessary.

Bad

int add(int a, int b) {
  final result = a + b;
  return result;
}

Good

int add(int a, int b) {
  return a + b;
}

Fix

prefer_immediate_return

prefer_iterable_first #

Using iterable.first increases code readability.

Bad

const numbers = [1, 2, 3];
int firstNumber;

firstNumber = numbers[0];
firstNumber = numbers.elementAt(0);

Good

const numbers = [1, 2, 3];
int firstNumber;

firstNumber = numbers.first;

Fix

prefer_iterable_first

prefer_iterable_last #

Using iterable.last increases code readability.

Bad

const numbers = [1, 2, 3];
int lastNumber;

lastNumber = numbers[numbers.length - 1];
lastNumber = numbers.elementAt(numbers.length - 1);

Fix

prefer_iterable_last

Good

const numbers = [1, 2, 3];
int lastNumber;

lastNumber = numbers.last;

Flutter lints #

avoid_single_child_in_flex #

Using Column or Row with only one child is inefficient.

Bad

Row(
  children: [
    Container(),
  ],
)

Good

Align(
  child: Container(),
)

// or

Center(
  child: Container(),
)

Fix

avoid_single_child_in_flex

correct_order_for_super_dispose #

super.dispose() should be called at the end of the dispose method.

Bad

@override
void dispose() {
  super.dispose();
  _dispose();
}

Good

@override
void dispose() {
  _dispose();
  super.dispose();
}

Fix

correct_order_for_dispose

correct_order_for_super_init_state #

super.initState() should be called at the start of the initState method.

Bad

@override
void initState() {
  _init();
  super.initState();
}

Good

@override
void initState() {
  super.initState();
  _init();
}

Fix

correct_order_for_init_state

prefer_border_from_border_side #

Border.all is not a const constructor and it uses const constructor Border.fromBorderSide internally.

Bad

DecoratedBox(
  decoration: BoxDecoration(
    border: Border.all(
      width: 1,
      style: BorderStyle.solid,
    ),
  ),
)

Good

const DecoratedBox(
  decoration: BoxDecoration(
    border: Border.fromBorderSide(
      BorderSide(
        width: 1,
        style: BorderStyle.solid,
      ),
    ),
  ),
)

Fix

prefer_border_from_border_side

prefer_border_radius_all #

BorderRadius.all is not a const constructor and it uses const constructor BorderRadius.circular internally.

Bad

DecoratedBox(
  decoration: BoxDecoration(
    borderRadius: BorderRadius.circular(8),
  ),
)

Good

const DecoratedBox(
  decoration: BoxDecoration(
    borderRadius: BorderRadius.all(Radius.circular(8)),
  ),
)

Fix

prefer_border_radius_all

prefer_spacer #

Using Expanded with an empty Container or SizedBox is inefficient.

Bad

Column(
  children: [
    Expanded(
      flex: 2,
      child: SizedBox(),
    ),
  ],
)

Good

Column(
  children: [
    Spacer(flex: 2),
  ],
)

Fix

prefer_spacer

prefer_text_rich #

RichText does not inherit TextStyle from DefaultTextStyle.

Bad

RichText(
  text: const TextSpan(
    text: 'Pyramid',
    children: [
      TextSpan(text: 'Lint'),
    ],
  ),
)

Good

const Text.rich(
  TextSpan(
    text: 'Pyramid',
    children: [
      TextSpan(text: 'Lint'),
    ],
  ),
)

Fix

prefer_text_rich

proper_usage_of_expanded_and_flexible #

Expanded and Flexible should be placed inside a Row, Column, or Flex.

Bad

Center(
  child: Expanded(
    child: Container(),
  ),
)

Good

Row(
  children: [
    Expanded(
      child: Container(),
    ),
  ],
)

Assists #

use_edge_insets_zero #

Replace

  • EdgeInsets.all(0)
  • EdgeInsets.fromLTRB(0, 0, 0, 0)
  • EdgeInsets.only(left: 0, top: 0, right: 0, bottom: 0)
  • EdgeInsets.symmetric(horizontal: 0, vertical: 0)

with EdgeInsets.zero.

use_edge_insets_zero

wrap_with_expanded #

Wrap the selected widget with an Expanded.

wrap_with_expanded

wrap_with_stack #

Wrap the selected widget with a Stack.

wrap_with_stack

8
likes
0
pub points
78%
popularity

Publisher

unverified uploader

pyramid_lint introduces a set of additional lints and fixes to enforce a consistent coding style, prevent common mistakes and enhance code readability.

Repository (GitHub)
View/report issues

Topics

#lints #analyzer

License

unknown (license)

Dependencies

analyzer, analyzer_plugin, collection, custom_lint_builder

More

Packages that depend on pyramid_lint