DFS – Dart Flutter Scripts
Warning: everything is WIP.
A collection of useful scripts for dart or flutter projects.
The scripts can be executed in the working directory of any dart or flutter project.
Installation:
Until the package is published to pub.dev
, it can be installed as follow:
[~] dart pub global activate --source git https://github.com/osaxma/dfs.git
To run any script:
[~/path/to/project] dfs <script-command>
Note: each script will only work in the current working directory (i.e. one cannot pass a path to a different directory — at least for now).
Each <script-command>
is shown below under the available scripts.
Available Scripts
-
Find Unused Packages (status: MVP)
Area: project hygiene
command:find-unused-packages
alias:fup
Description:
with the help of dart’sanalyzer
andpubspec
packages, the script inpset both thepubspec.yaml
file and all dart files withinlib
to find any unused dependencies.Sample Output:
[~/cwd] dfs find-unused-packages The following packages are not used anywhere in the lib directory. If they are used elsewhere (e.g. /test), consider moving them to `dev_dependencies` in `pubspec.yaml` - code_builder - dart_style - logging
-
Find Unused Top Level Declaration (status: MVP)
Area: project hygiene
command:find-unused-top-level
alias:futl
Finds unused top-level elements (classes, typedefs, getters, setters, functions and fields). This useful for dart/flutter projects that are not packages.
Sample output
[~/cwd]$ dfs find-unused-top-level finding unused top level declarations... The following top level declarations are not used anywhere - /cwd/lib/src/version.dart:7:7 - /cwd/lib/src/common/ast_utils.dart:7:9
To ignore specific files, you can pass globs to
--ignore
such as:dfs find-unused-top-level --ignore="lib/**.g.dart","lib/**.freezed.dart","**/genl10n/*.dart"
For more info about the default ignored files, run the help command:
dfs find-unused-top-level --help
-
Generate Data Classes (status: MVP)
Area: utility
command:generate-data-classes
alias:gdc
Generate the following for an existing class (in place):
copyWith
method.- serialization methods (
toMap
/toJson
) and deserialization factories (fromMap
/fromJson
). - Equality (
operator ==
) andhashcode
.
See how the data looks like before and after running the script at:
The input data is read by parsing the Abstract Syntax Tree (AST) using the
analyzer package
, and then the data class is built using thecode builder package
.
Ideas for future scripts
-
Change Project Name (status: TBD)
Area: pain
command: TBD
alias: TBDThis is mainly for Flutter, and especially for multi-platform code where the name has to be changed in various places.
-
Run Script (status: TBD)
Area: utility
command: run
alias: N/A[~/cwd] dfs run <script>
Where <script> is defined in
pubspec.yaml
script: build: flutter pub run build_runner build --delete-conflicting-outputs data: dfs generate-data-classes --endsWith="_data.dart" --directory="lib"
-
Get Packages For All (status: TBD)
Area: utility
command: TBD
alias: TBD[~/cwd] dfs get packages --all
Or
[~/cwd] dfs get all
Run
dart pub get
orflutter packages get
for all packages within a monorepo or a repo with multiple packages.