gmlewis / flutter-stylizer

Flutter Stylizer is a VSCode extension that organizes your Flutter classes and mixins in an opinionated and consistent manner.
https://marketplace.visualstudio.com/items?itemName=gmlewis-vscode.flutter-stylizer
Apache License 2.0
23 stars 3 forks source link
class dart flutter stylizer

flutter-stylizer - Mothballed/Archived Plugin

CodeQL

Flutter Stylizer is a VSCode extension that organizes your Flutter classes in an opinionated and consistent manner.

Note that as of release 0.1.1, there is now a standalone version of flutter-stylizer (with identical output to this plugin) that is available here:

Status

After 5 years, 119K installs, 4.9/5 stars, and zero sponsors, this project is now mothballed and archived. Feel free to fork the project to create your own version of the plugin and add your own customizations to your liking.

Features

Flutter Stylizer organizes the class(es) within a *.dart file in the following manner (with a blank line separating these parts):

I have found that developer productivity increases when all code in large projects follows a consistent and opinionated style.

Additionally, bringing new developers into a team with a large code base is easier when the code is consistently written and therefore easier to navigate and understand.

Without tooling to enforce a consistent style, developing code is less fun. Having an automated tool to do this ugly work for you, however, makes coding a lot more enjoyable, as you don't have to worry about the rules, but can just run the plugin on file save, and the rules are automatically enforced. Note that this plugin doesn't natively support format-on-save, but you could use another extension... possibly something like this: https://marketplace.visualstudio.com/items?itemName=emeraldwalk.RunOnSave or you could use the stand-alone Go flutter-stylizer in your GitHub Actions or CI pipeline to perform this action for you.

Configuration

To override the default order of the stylizer, add a section to your VSCode User Preferences (Control/Cmd-,) like this:

  "flutterStylizer": {
    "groupAndSortGetterMethods": false,
    "groupAndSortVariableTypes": false,
    "memberOrdering": [
      "public-constructor",
      "named-constructors",
      "public-static-variables",
      "public-instance-variables",
      "public-override-variables",
      "private-static-variables",
      "private-instance-variables",
      "public-override-methods",
      "public-other-methods",
      "private-other-methods",
      "build-method",
    ],
    "processEnumsLikeClasses": false,
    "sortClassesWithinFile": false,
    "sortOtherMethods": false,
  }

And then rearrange member names as desired.

Other option flags

Note that as of v0.0.19, two new option flags were added to modify the behavior of the "public-other-methods" as requested in #18:

As of v0.1.5, a new private-other-methods field was added. If not specified, private methods will continue to be grouped within the public-other-methods section.

As of v0.1.8, a new option flag was added:

As of v0.1.12, a new option flag was added:

As of v0.1.15, a new option flag was added:

These features are experimental and should be used with caution. Please file any bugs you find on the GitHub issue tracker.

Run Flutter Stylizer on all files - Option 1

If you want a super-fast way to process all files in a very large project, and aren't averse to the command-line terminal (:smile:) please remember to check out the stand-alone command-line companion tool: https://github.com/gmlewis/go-flutter-stylizer

Run Flutter Stylizer on all files - Option 2

If you install the Command on All Files VSCode extension, you can then run the Flutter Stylizer on all files within your project.

To do so, edit your VSCode settings.json file and add this section:

"commandOnAllFiles.commands": {
    "Format File": {
        "command": "editor.action.formatDocument",
        "includeFileExtensions": [
            ".dart"
        ]
    },
    "Flutter Stylizer": {
        "command": "extension.flutterStylizer",
        "includeFileExtensions": [
            ".dart"
        ]
    }
}

Then run the command "Flutter Stylizer" and all .dart files in your project will be stylized.

Note that this command can take upwards of 20 seconds just to get going due to the time it takes to scan your project for .dart files.

Many thanks to @longtimedeveloper for this recommendation!

Limitations

This plugin does not have a full-featured Dart syntax tree parser. As a result, it may come across Dart code that it doesn't handle properly. See the Known Issues section below for more details.

Reporting Problems

It is my goal to be able to use this plugin on large group projects, so every attempt has been made to make this robust. If, however, problems are found, please raise issues on the GitHub issue tracker for this repo along with a (short) example demonstrating the "before" and "after" results of running this plugin on the example code.

Even better, please submit a PR with your new "before"/"after" example coded-up as a unit test along with the code to fix the problem, and I'll try to incorporate the fix into the plugin.

Please remember to state which version of the plugin you are using and include your configuration settings!

Known Issues

Release Notes

v0.1.16

v0.1.15

v0.1.14

v0.1.13

v0.1.12

v0.1.11

v0.1.10

v0.1.9

v0.1.8

v0.1.7

0.1.6

0.1.5

0.1.3

0.1.2

0.1.1

0.0.21

0.0.20

0.0.19

0.0.18

0.0.17

0.0.16

0.0.15

0.0.14

0.0.13

0.0.12

0.0.11

0.0.10

0.0.9

0.0.8

0.0.7

0.0.6

0.0.5

0.0.4

0.0.3

0.0.2

0.0.1


Enjoy!


License

Copyright 2018 Glenn M. Lewis. All Rights Reserved.

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.