ren 0.3.3
ren: ^0.3.3 copied to clipboard
A static analysis tool that measures the performance weight of each feature in your Flutter app — detecting costly AST patterns and reporting a gravity score per feature.
0.3.3 #
Changed #
- Pattern output now shows the absolute file path instead of a relative path —
enables
Cmd+Click/Ctrl+Clickto open the file directly.
0.3.2 #
Fixed #
LeakVisitor._getMembers— added third fallback viadeclaredFragmentforanalyzerversions where neithermembersnordeclaredMembersare available, preventingNoSuchMethodErroronClassDeclarationImpl.LeakVisitor._getClassName/_getMethodName/_getVariableName— addeddeclaredElement?.nameas final fallback for full version coverage.
0.3.0 #
Added #
AnalysisContextCollectionsupport — ren now uses full semantic analysis instead ofparseString, resolving imports, re-exports, and type aliases correctly. Falls back toparseStringautomatically if the context cannot be built (e.g.pub getnot run).
0.2.3 #
Fixed #
- Feature scanner now includes
.dartfiles at the root of the specified feature folder as a named feature — previously only sub-directories were scanned, causing files at the root level to be silently skipped.
0.2.2 #
Fixed #
LeakVisitor— added curly braces to all single-lineifstatements in_detectResourceTypeto satisfycurly_braces_in_flow_control_structureslint rule.
0.2.1 #
Fixed #
LeakVisitorcompatibility withanalyzer >=7.1.0— added fallback helpers forClassDeclaration.name,ClassDeclaration.members,MethodDeclaration.name, andVariableDeclaration.nameto support lower bound versions without breaking newer ones.ChangeNotifierandValueNotifierleak fix message now clarifies that Provider/Riverpod disposes them automatically.
0.2.0 #
Added #
ren --init— scans project structure and generatesren.yamlautomatically.- Auto-discovery — detects feature root without
--featuresflag, supports non-conventional structures (lib/ui/screens,lib/presentation/pages, etc.). ren.yamlsupport — project-level configuration:features,fail_on,ignore,weights,custom_rules.- CLI flags always take priority over
ren.yaml.
- Actionable fix per pattern — every detected pattern includes a
->suggestion. - Resource leak detection (
LeakVisitor) — verifies thatStreamController,StreamSubscription,Timer,AnimationController,TextEditingController,ScrollController,FocusNode,PageController,TabController,ValueNotifier,ChangeNotifierare closed indispose(). - Score normalization by pattern level — presence, context, and risk patterns use separate weight ceilings.
- Output improvements — separators between features, pattern level icons (⚪ 🟡 🔴), gravity legend at the top of the report.
- JSON output now includes
level,context,reason, andfixper pattern. - Windows hint — suggests
Remove-Item Alias:ren -Forceon PowerShell.
0.1.0 #
Added #
- Compound rule detection — 20+ widget combinations with elevated weights:
- Level 3 (critical × 2.5) —
BackdropFilter/ShaderMask/ImageFiltered/ColorFilteredinsideListView/GridView,Opacity/ClipPath/ClipRRectinsideAnimatedBuilder,OpacityinsideListView/GridView. - Level 2 (high × 1.5) —
BackdropFilterinsideStack/PageView,NetworkImageinsideListView/GridView,CustomPaint/ClipPathinsideAnimatedBuilder/ListView/GridView,HeroinsideListView/GridView,ShaderMaskinsideAnimatedBuilder.
- Level 3 (critical × 2.5) —
- Top contributors breakdown per feature — shows which patterns contribute most to the gravity score.
[inside ParentWidget]context tag on compound patterns.renwexecutable — fallback for Windows PowerShell whererenconflicts withRename-Item.- New patterns —
ClipRRect,Hero. lambda-depthtracking to avoid false positives onsetStateinside callbacks.
Fixed #
setStatefalse positives on callbacks with target (e.g.state.setState,logic.setState).GridView.countand other non-lazy named constructors now correctly flagged.Image.networkdetection via full name matching invisitMethodInvocation.
0.0.1 #
- Feature detection by folder convention (
lib/features/,lib/modules/). --featuresflag for custom feature roots (e.g.lib/ui/screens).--excludeflag — comma-separated list of paths to exclude from analysis (e.g.lib/generated,lib/_tools).- Simplified CLI —
renruns analysis directly without subcommand. - AST-based pattern detection across six categories:
- GPU-costly widgets —
BackdropFilter,ShaderMask,Opacity,ColorFiltered,ImageFiltered,saveLayer,ClipPath,CustomPaint. - Unoptimized lists —
ListView,GridView,SingleChildScrollView,Wrap. - Uncached images —
Image.network,NetworkImage,FadeInImage. - Rebuild patterns —
RepaintBoundary,MediaQuery.of. - Memory leaks —
Timer,Timer.periodic,StreamController,StreamSubscription. - Lifecycle misuse —
setState in build,setState in initState,setState in dispose.
- GPU-costly widgets —
- Gravity score (0–100) per feature mapped to
LOW / MEDIUM / HIGH / CRITICAL. - ANSI console output with gravity bar and per-pattern hints.
- JSON output (
--format json) for CI/CD pipelines. --fail-onflag — exits with code 1 if any feature reaches the specified level.