From 8e4dde9a20cd27a0567002479c87c95656fa380d Mon Sep 17 00:00:00 2001 From: Tatiana Sugina <39735343+internetova@users.noreply.github.com> Date: Thu, 15 Feb 2024 11:57:52 +0300 Subject: [PATCH] Initial create (#1) --- .github/workflows/check_issue.yaml | 15 ++ .github/workflows/main.yml | 31 +++ .github/workflows/new_issues_label.yml | 16 ++ .github/workflows/new_pull_request_label.yml | 17 ++ .../new_pull_request_main_actions.yml | 22 ++ .github/workflows/publish_to_pub.yml | 44 ++++ CHANGELOG.md | 5 + CONTRIBUTING.md | 32 +++ LICENSE | 202 ++++++++++++++++++ README.md | 70 ++++++ lib/all.yaml | 7 + lib/dart.yaml | 194 +++++++++++++++++ lib/flutter.yaml | 35 +++ lib/intl.yaml | 6 + lib/provider.yaml | 8 + lib/pub.yaml | 8 + pubspec.lock | 5 + pubspec.yaml | 7 + 18 files changed, 724 insertions(+) create mode 100644 .github/workflows/check_issue.yaml create mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/new_issues_label.yml create mode 100644 .github/workflows/new_pull_request_label.yml create mode 100644 .github/workflows/new_pull_request_main_actions.yml create mode 100644 .github/workflows/publish_to_pub.yml create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 lib/all.yaml create mode 100644 lib/dart.yaml create mode 100644 lib/flutter.yaml create mode 100644 lib/intl.yaml create mode 100644 lib/provider.yaml create mode 100644 lib/pub.yaml create mode 100644 pubspec.lock create mode 100644 pubspec.yaml diff --git a/.github/workflows/check_issue.yaml b/.github/workflows/check_issue.yaml new file mode 100644 index 0000000..e65a3fe --- /dev/null +++ b/.github/workflows/check_issue.yaml @@ -0,0 +1,15 @@ +name: "Checking issue for correctness of described" + +on: + issues: + types: + - reopened + - opened + +jobs: + check-issue: + uses: surfstudio/flutter-ci-workflows/.github/workflows/check_issues.yaml@main + with: + REPO_PATH: 'https://github.com/surfstudio/surf-dcm-presets/issues/new/choose' + ISSUE_TITLE: ${{ github.event.issue.title }} + ISSUE_BODY: ${{ github.event.issue.body }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..8e57417 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,31 @@ +name: "Main" + +on: + pull_request: + +jobs: + check_branch_content: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Content + id: check_files + uses: andstor/file-existence-action@v1 + with: + files: "LICENSE, README.md, CHANGELOG.md, CONTRIBUTING.md" + + - name: File exists + if: steps.check_files.outputs.files_exists == 'true' + run: echo Content is ok! + + - name: Check Description + run: echo | grep -q Description README.md ; echo $? + + - name: Check Example + run: echo | grep -q Example README.md ; echo $? + + - name: Check Installation + run: echo | grep -q Installation README.md ; echo $? diff --git a/.github/workflows/new_issues_label.yml b/.github/workflows/new_issues_label.yml new file mode 100644 index 0000000..5319ce7 --- /dev/null +++ b/.github/workflows/new_issues_label.yml @@ -0,0 +1,16 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Label issues +on: + issues: + types: + - reopened + - opened +jobs: + label_issues: + uses: surfstudio/flutter-ci-workflows/.github/workflows/new_issues_label.yml@main + secrets: + SECRET_ISSUES: ${{ secrets.SECRET_ISSUES }} diff --git a/.github/workflows/new_pull_request_label.yml b/.github/workflows/new_pull_request_label.yml new file mode 100644 index 0000000..fb21084 --- /dev/null +++ b/.github/workflows/new_pull_request_label.yml @@ -0,0 +1,17 @@ +# This workflow is triggered when a WIP label is added to an open pull request. +# When deleting the WIP label, the new_pull_request label is added. +# When adding a WIP label, the new_pull_request label is removed if there is one. + +name: Pull-request label tracking +on: + pull_request_target: + types: + - labeled + - unlabeled + +jobs: + label_pull_request: + if: ${{ github.event.label.name == 'WIP' }} + uses: surfstudio/flutter-ci-workflows/.github/workflows/new_pull_request_label.yml@main + secrets: + SECRET_ISSUES: ${{ secrets.SECRET_ISSUES }} diff --git a/.github/workflows/new_pull_request_main_actions.yml b/.github/workflows/new_pull_request_main_actions.yml new file mode 100644 index 0000000..ccf208e --- /dev/null +++ b/.github/workflows/new_pull_request_main_actions.yml @@ -0,0 +1,22 @@ +# This workflow is triggered when a pull request opened, edited, reopened, +# converted_to_draft and ready_for_review. +# +# There is no WIP in the title, there is no WIP label and the pull request is not a draft the +# new pull request label is added. +# If either of these is true then remove the label new pull request if there is one. + +name: Pull-request tracking +on: + pull_request_target: + types: + - opened + - edited + - reopened + - converted_to_draft + - ready_for_review + +jobs: + pull_request: + uses: surfstudio/flutter-ci-workflows/.github/workflows/new_pull_request_label.yml@main + secrets: + SECRET_ISSUES: ${{ secrets.SECRET_ISSUES }} \ No newline at end of file diff --git a/.github/workflows/publish_to_pub.yml b/.github/workflows/publish_to_pub.yml new file mode 100644 index 0000000..bff645d --- /dev/null +++ b/.github/workflows/publish_to_pub.yml @@ -0,0 +1,44 @@ +name: "Publishing" + +on: + push: + tags: + - v* + +jobs: + check_branch_content: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Content + id: check_files + uses: andstor/file-existence-action@v1 + with: + files: "LICENSE, README.md, CHANGELOG.md, CONTRIBUTING.md" + + - name: File exists + if: steps.check_files.outputs.files_exists == 'true' + run: echo Content is ok! + + - name: Check Description + run: echo | grep -q Description README.md ; echo $? + + - name: Check Example + run: echo | grep -q Example README.md ; echo $? + + - name: Check Installation + run: echo | grep -q Installation README.md ; echo $? + + + package-publishing: + needs: check_branch_content + uses: surfstudio/flutter-ci-workflows/.github/workflows/publish_to_pub.yml@main + with: + PANA_TOTAL: '100' + secrets: + PUB_CREDENTIAL_JSON: ${{ secrets.SURF_PUB_CREDENTIAL_JSON }} + PUB_OAUTH_ACCESS_TOKEN: ${{ secrets.SURF_PUB_OAUTH_ACCESS_TOKEN }} + PUB_OAUTH_REFRESH_TOKEN: ${{ secrets.SURF_PUB_OAUTH_REFRESH_TOKEN }} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1d1b015 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 0.0.1 + +* initial release diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..d607fb3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,32 @@ +# Contributing rules + +Thank you for your help! Before you start, let's take a look at some agreements. + +## Pull request rules + +Make sure that your code: + +1. Does not contain analyzer errors. +2. Follows a [official style](https://dart.dev/guides/language/effective-dart/style). +3. Follows the official [style of formatting](https://flutter.dev/docs/development/tools/formatting). +4. Contains no errors. +5. New functionality is covered by tests. New functionality passes old tests. +6. Create example that demonstrate new functionality if it is possible. + +## Accepting the changes + +After your pull request passes the review code, the project maintainers will merge the changes +into the branch to which the pull request was sent. + +## Issues + +Feel free to report any issues and bugs. + +1. To report about the problem, create an issue on GitHub. +2. In the issue add the description of the problem. +3. Do not forget to mention your development environment, Flutter version, libraries required for + illustration of the problem. +4. It is necessary to attach the code part that causes an issue or to make a small demo project + that shows the issue. +5. Attach stack trace so it helps us to deal with the issue. +6. If the issue is related to graphics, screen recording is required. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ea57b28 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 SurfStudio LLC + + Licensed 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. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ce2a406 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# Surf DCM Presets + +[![Build Status](https://shields.io/github/actions/workflow/status/surfstudio/flutter-surf-logger/main.yml?logo=github&logoColor=white)](https://github.com/surfstudio/surf-dcm-presets) +[![Pub Version](https://img.shields.io/pub/v/surf_dcm_presets?logo=dart&logoColor=white)](https://pub.dev/packages/surf_dcm_presets) +[![Pub Likes](https://badgen.net/pub/likes/surf_dcm_presets)](https://pub.dev/packages/surf_dcm_presets) +[![Pub popularity](https://badgen.net/pub/popularity/surf_dcm_presets)](https://pub.dev/packages/surf_dcm_presets/score) +![Flutter Platform](https://badgen.net/pub/flutter-platform/surf_dcm_presets) + +## Description + +This repository contains a list of pre-set presets for DCM that are used on Surf projects: + +- **All:** contains all available lint rules. +- **Dart:** contains all lint rules applicable to any Dart app. +- **Flutter:** contains all lint rules applicable to any Flutter app. +- **Provider:** contains all lint rules for the Provider package. +- **Intl:** contains all lint rules for the Intl package. +- **Pub:** contains all lint rules for linting the `pubspec.yaml` files. + +## Installation + +Take these steps to enable a preset: + +Install this package as a dev dependency: + + ```terminal + dart pub add --dev surf_dcm_presets + ``` + + or: + + ```terminal + flutter pub add --dev surf_dcm_presets + ``` +## Example + +For DCM configuration add the `extents` entry: + + ```yaml + dart_code_metrics: + extends: + - package:surf_dcm_presets/all.yaml + ``` + +## Disabling or reconfiguring a rule from the preset + +To disable a rule, simply set its value to false: + +```yaml +dart_code_metrics: + extends: + - package:surf_dcm_presets/all.yaml + rules: + - avoid-banned-imports: false +``` + +To reconfigure a rule, that is included into a preset: + +```yaml +dart_code_metrics: + extends: + - package:surf_dcm_presets/all.yaml + rules: + - arguments-ordering: + child-last: true +``` + +## Defining a custom preset + +Any other preset can be passed to the `extends` entry. To create a custom preset create a `yaml` file with the same structure as for regular [DCM configuration](https://dcm.dev/docs/configuration/). diff --git a/lib/all.yaml b/lib/all.yaml new file mode 100644 index 0000000..05c9e6a --- /dev/null +++ b/lib/all.yaml @@ -0,0 +1,7 @@ +dart_code_metrics: + extends: + - package:surf_dcm_presets/dart.yaml + - package:surf_dcm_presets/flutter.yaml + - package:surf_dcm_presets/provider.yaml + - package:surf_dcm_presets/intl.yaml + - package:surf_dcm_presets/pub.yaml diff --git a/lib/dart.yaml b/lib/dart.yaml new file mode 100644 index 0000000..1a27e9a --- /dev/null +++ b/lib/dart.yaml @@ -0,0 +1,194 @@ +dart_code_metrics: + rules: + # https://dcm.dev/docs/rules/common + - arguments-ordering: + child-last: true + - avoid-accessing-collections-by-constant-index + - avoid-accessing-other-classes-private-members + - avoid-async-call-in-sync-function + - avoid-barrel-files + - avoid-bottom-type-in-patterns + - avoid-bottom-type-in-records + # https://github.com/dart-lang/sdk/issues/45667 + - avoid-cascade-after-if-null + - avoid-collapsible-if + - avoid-collection-methods-with-unrelated-types + - avoid-declaring-call-method + - avoid-double-slash-imports + - avoid-duplicate-cascades + - avoid-duplicate-collection-elements + - avoid-duplicate-exports + - avoid-duplicate-initializers + - avoid-duplicate-map-keys + - avoid-duplicate-mixins + - avoid-duplicate-named-imports + - avoid-duplicate-patterns + - avoid-duplicate-switch-case-conditions + - avoid-duplicate-test-assertions + - avoid-dynamic + - avoid-equal-expressions + - avoid-explicit-pattern-field-name + - avoid-explicit-type-declaration + - avoid-extensions-on-records + - avoid-function-type-in-records + - avoid-future-tostring + - avoid-generics-shadowing + - avoid-global-state + - avoid-identical-exception-handling-blocks + - avoid-ignoring-return-values + - avoid-inverted-boolean-checks + - avoid-keywords-in-wildcard-pattern + - avoid-local-functions + - avoid-long-files: + max-length: 500 + - avoid-long-functions: + max-length: 80 + ignored-names: + - build + - avoid-long-parameter-list: + ignore-optional: true + max-amount: 5 + ignored-names: + - copyWith + - avoid-long-records: + max-amount: 3 + # https://github.com/dart-lang/sdk/issues/52909 + - avoid-map-keys-contains + - avoid-missed-calls + - avoid-missing-enum-constant-in-map + - avoid-missing-interpolation + - avoid-misused-wildcard-pattern + - avoid-mixing-named-and-positional-fields + - avoid-mutating-parameters + - avoid-negated-conditions + - avoid-nested-conditional-expressions: + acceptable-level: 2 + - avoid-nested-futures + - avoid-nested-records + - avoid-nested-streams-and-futures + - avoid-nested-switch-expressions + - avoid-nested-switches + - avoid-non-null-assertion + - avoid-nullable-interpolation + - avoid-nullable-parameters-with-default-values + - avoid-nullable-tostring + - avoid-one-field-records + - avoid-passing-async-when-sync-expected + - avoid-passing-default-values + - avoid-passing-self-as-argument + - avoid-positional-record-field-access + - avoid-recursive-calls + - avoid-redundant-async + - avoid-redundant-else + - avoid-referencing-discarded-variables + - avoid-self-assignment + - avoid-self-compare + - avoid-shadowed-extension-methods + - avoid-shadowing + - avoid-throw-in-catch-block + - avoid-throw-objects-without-tostring + - avoid-unassigned-late-fields + - avoid-unassigned-stream-subscriptions + - avoid-unconditional-break + - avoid-unnecessary-conditionals + - avoid-unnecessary-futures + - avoid-unnecessary-if + - avoid-unnecessary-local-late + - avoid-unnecessary-negations + - avoid-unnecessary-nullable-return-type + - avoid-unnecessary-return + - avoid-unnecessary-super + - avoid-unsafe-collection-methods + - avoid-unused-after-null-check + - avoid-unused-parameters + - binary-expression-operand-order + - double-literal-format: + explicit-trailing-zero: true + - format-comment: + only-doc-comments: false + - function-always-returns-null + - map-keys-ordering + - match-positional-field-names-on-assignment + - member-ordering: + order: + - public-fields + - private-fields + - public-getters + - private-getters + - public-setters + - private-setters + - constructors + - close-method + - dispose-method + - public-methods + - private-methods + widgets-order: + - constructor + - named-constructor + - const-fields + - final-fields + - init-state-method + - did-change-dependencies-method + - did-update-widget-method + - dispose-method + - private-methods + - overriden-public-methods + - build-method + - move-records-to-typedefs: + min-fields: 3 + min-occurences: 2 + - move-variable-closer-to-its-usage + - move-variable-outside-iteration + - newline-before-return + - no-boolean-literal-compare + - no-empty-block + - no-equal-arguments: + ignored-parameters: + - height + - width + - no-equal-conditions + - no-equal-nested-conditions + - no-equal-switch-case + - no-equal-switch-expression-cases + - no-equal-then-else + - no-magic-number: + allowed: [ -1, 0, 1 ] + - no-object-declaration + - prefer-addition-subtraction-assignments + - prefer-any-or-every + - prefer-correct-callback-field-name: + name-pattern: ^on[A-Z]+ + - prefer-correct-error-name: + allowed-names: [ error, exception, failure ] + - prefer-correct-identifier-length: + max-identifier-length: 30 + min-identifier-length: 2 + - prefer-correct-stream-return-type + - prefer-declaring-const-constructor: + ignore-abstract: true + - prefer-early-return: + ignore-if-case: true + - prefer-explicit-function-type + - prefer-explicit-type-arguments + - prefer-immediate-return + - prefer-match-file-name: + exclude: + - "test/**" + - "lib/**/*wm.dart" + - prefer-moving-to-variable: + allowed-duplicated-chains: 3 + - prefer-named-boolean-parameters: + ignore-single: true + ignore-single-boolean: false + - prefer-null-aware-spread + - prefer-parentheses-with-if-null + - prefer-public-exception-classes + - prefer-return-await + - prefer-simpler-patterns-null-check + - prefer-switch-with-enums + - prefer-test-matchers + - prefer-typedefs-for-callbacks + - prefer-unique-test-names + - prefer-wildcard-pattern + # Style + - unnecessary-trailing-comma: false diff --git a/lib/flutter.yaml b/lib/flutter.yaml new file mode 100644 index 0000000..8a61e7c --- /dev/null +++ b/lib/flutter.yaml @@ -0,0 +1,35 @@ +dart_code_metrics: + rules: + # https://dcm.dev/docs/rules/flutter + - avoid-border-all + - avoid-empty-setstate + - avoid-expanded-as-spacer + - avoid-incomplete-copy-with + - avoid-late-context + - avoid-recursive-widget-calls + - avoid-returning-widgets + - avoid-shrink-wrap-in-lists + - avoid-single-child-column-or-row + - avoid-stateless-widget-initialized-fields + - avoid-undisposed-instances + - avoid-unnecessary-overrides-in-state + - avoid-unnecessary-setstate + - avoid-unnecessary-stateful-widgets + - avoid-wrapping-in-padding + - check-for-equals-in-render-object-setters + - consistent-update-render-object + - dispose-fields + - prefer-const-border-radius + - prefer-correct-edge-insets-constructor + - prefer-dedicated-media-query-methods + - prefer-define-hero-tag + - prefer-extracting-callbacks: + allowed-line-count: 3 + - prefer-single-widget-per-file: + ignore-private-widgets: true + - prefer-sliver-prefix + - prefer-text-rich + - prefer-using-list-view + - prefer-widget-private-members + - proper-super-calls + - use-setstate-synchronously diff --git a/lib/intl.yaml b/lib/intl.yaml new file mode 100644 index 0000000..0223dcc --- /dev/null +++ b/lib/intl.yaml @@ -0,0 +1,6 @@ +dart_code_metrics: + rules: + # https://dcm.dev/docs/rules/intl + - prefer-date-format + - prefer-intl-name + - prefer-providing-intl-description diff --git a/lib/provider.yaml b/lib/provider.yaml new file mode 100644 index 0000000..ccb1fa7 --- /dev/null +++ b/lib/provider.yaml @@ -0,0 +1,8 @@ +dart_code_metrics: + rules: + # https://dcm.dev/docs/rules/provider + - avoid-instantiating-in-value-provider + - avoid-read-inside-build + - avoid-watch-outside-build + - dispose-providers + - prefer-multi-provider diff --git a/lib/pub.yaml b/lib/pub.yaml new file mode 100644 index 0000000..4f29ba8 --- /dev/null +++ b/lib/pub.yaml @@ -0,0 +1,8 @@ +dart_code_metrics: + pubspec-rules: + - avoid-any-version + - prefer-publish-to-none + - prefer-semver-version + - banned-dependencies: + banned: + - get diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..b60a9e0 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,5 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: {} +sdks: + dart: ">=2.17.0 <4.0.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..514fa50 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,7 @@ +name: surf_dcm_presets +version: 0.0.1 +description: Predefined presets for Dart Code Metrics. +repository: https://github.com/surfstudio/surf-dcm-presets + +environment: + sdk: ">=2.17.0 <4.0.0"