rehlma / flutter-debuggable-control-flowr1
Keep control flow easy to debug
PublicUse braces and put every control-flow body on a separate line.
tests, run by the registry9 passed · slowest 2.6 ms
✓fires2.6 ms
reports newly written problematic code
write lib/example.dart · in fixtures/flutterfired: line 1
if (ready) { return; }✓quiet2.0 ms
allows the intended form
write lib/example.dart · in fixtures/flutterstayed quiet
if (ready) {
return;
}✓quiet1.6 ms
does not apply to a pure Dart package
write lib/example.dart · in fixtures/dartstayed quiet
if (ready) { return; }✓skips0.0 ms
does not judge reads
read lib/example.dart · in fixtures/flutterno handler of the detector wants this event
if (ready) { return; }✓quiet1.7 ms
does not report an untouched legacy line
write lib/example.dart · in fixtures/flutter · wrote line 2stayed quiet
if (ready) { return; }
final added = 1;✓quiet1.8 ms
ignores comments, strings and collection elements
write lib/a.dart · in fixtures/flutterstayed quiet
// if (ready) return;
final text = 'if (ready) return;';
final values = [if (ready) value];✓fires1.6 ms
supports inline flutter dependency
write lib/a.dart · in fixtures/inlinefired: line 1
if (ready) return;✓skips0.0 ms
ignores generated source
write lib/a.genq.dart · in fixtures/flutterno handler of the detector wants this event
if (ready) return;✓quiet1.9 ms
allows multiline collection elements and do-while endings
write lib/a.dart · in fixtures/flutterstayed quiet
final items = [
if (ready) buildItem(),
];write lib/a.dart · in fixtures/flutterstayed quiet
} while (running);detector.test.tseach detect() call runs the real detector
import { expect, test } from 'vitest';
import { detect, write, edit, read, command, output, prompt } from '@wellactually/sdk/v3/test';
const flutter = { project: 'fixtures/flutter' };
const dart = { project: 'fixtures/dart' };
test('reports newly written problematic code', () => {
expect(detect(write("lib/example.dart", "if (ready) { return; }"), flutter)).toEqual([{ line: 1 }]);
});
test('allows the intended form', () => {
expect(detect(write("lib/example.dart", "if (ready) {\n return;\n}"), flutter)).toEqual([]);
});
test('does not apply to a pure Dart package', () => {
expect(detect(write("lib/example.dart", "if (ready) { return; }"), dart)).toEqual([]);
});
test('does not judge reads', () => {
expect(detect(read("lib/example.dart", "if (ready) { return; }"), flutter)).toEqual([]);
});
test('does not report an untouched legacy line', () => {
expect(detect(edit("lib/example.dart", "if (ready) { return; }\nfinal added = 1;", { written: 'final added = 1;' }), flutter)).toEqual([]);
});
test('ignores comments, strings and collection elements', () => {
expect(detect(write('lib/a.dart', "// if (ready) return;\nfinal text = 'if (ready) return;';\nfinal values = [if (ready) value];"), flutter)).toEqual([]);
});
test('supports inline flutter dependency', () => {
expect(detect(write('lib/a.dart', 'if (ready) return;'), { project: 'fixtures/inline' })).toEqual([{ line: 1 }]);
});
test('ignores generated source', () => {
expect(detect(write('lib/a.genq.dart', 'if (ready) return;'), flutter)).toEqual([]);
});
test('allows multiline collection elements and do-while endings', () => {
expect(detect(write('lib/a.dart', 'final items = [\n if (ready) buildItem(),\n];'), flutter)).toEqual([]);
expect(detect(write('lib/a.dart', '} while (running);'), flutter)).toEqual([]);
});