banned-usage
- Group
- Suspicious
- Path
lint/suspicious/banned-usage- Default
- Off, opt in
- Origin
- Falcon
- Rule
- 192 of 512
Ban resolved API references, not identifiers that merely share their spelling.
Match top-level declaration names or DeclaringType.member; prefixes are ignored.
Calls, tear-offs, property reads/writes, constructors and cascades are included.
Unnamed constructors consistently use Class.new, including aliases and prefixes.
Dynamic and unresolved targets are skipped.
Invalid
import 'support.dart';
import 'support.dart' as p;
void legacy() {}
void example(Client client) {
legacy();
var callback = legacy;
client.old();
var method = client.old;
client..old();
}
void constructorsAndStatics() {
Client();
new Client();
const Client();
p.Client();
var factory = Client.new;
Alias.named();
new Alias.named();
print(Client.flag);
print(p.Client.flag);
print(Choice.legacy);
}
extension on String {
void shout() => legacy();
}
class Base {
void legacy() {}
}
class Sub extends Base {
void run() => legacy();
}
void shorthand() {
Choice choice = .legacy;
Client named = .named();
Client unnamed = .new();
}
class ChildClient extends Client {
ChildClient() : super.named();
}
class ClientFactory {
factory ClientFactory() = ClientFactory.named;
ClientFactory.named();
}void example(Client client) { legacy(); legacy(); var callback = legacy; var callback = legacy; client.old(); client.old(); var method = client.old; var method = client.old; client..old();void constructorsAndStatics() { Client(); Client(); new Client(); new Client(); const Client(); const Client(); p.Client(); p.Client(); var factory = Client.new; var factory = Client.new; Alias.named(); Alias.named(); new Alias.named(); new Alias.named(); print(Client.flag); print(Client.flag); print(p.Client.flag); print(p.Client.flag); print(Choice.legacy);extension on String { void shout() => legacy();class Sub extends Base { void run() => legacy();void shorthand() { Choice choice = .legacy; Choice choice = .legacy; Client named = .named(); Client named = .named(); Client unnamed = .new();class ChildClient extends Client { ChildClient() : super.named();class ClientFactory { factory ClientFactory() = ClientFactory.named;Valid
void legacy() {}
class Other {
void old() {}
}
void example(Other client) {
void legacy() {}
legacy();
client.old();
}
void dynamicReceiver(dynamic client) {
client.old();
}
class StaticOwner {
static void legacy() {}
void run() => legacy();
}
extension ExtensionOwner on int {
void legacy() {}
void run() => legacy();
}
enum OtherChoice {
legacy;
void run() => print(legacy);
}
class T {}
void generic<T>() => print(T);
extension on String {
void legacy() {}
void run() => legacy();
}
class GenericClient<T> {
const GenericClient.allowed();
}
void genericConstructors() {
GenericClient<int>.allowed();
var constructor = GenericClient<int>.allowed;
}
class InheritedBase {
void old() {}
}
class InheritedChild extends InheritedBase {
void run() => old();
}
enum ModernChoice { current }
class ModernClient {
ModernClient.named();
}
void shorthand() {
ModernChoice choice = .current;
ModernClient client = .named();
}
extension on int {
int get legacy => this;
int read() => legacy;
}
class ModernBase {
ModernBase.named();
}
class ModernChild extends ModernBase {
ModernChild() : super.named();
ModernChild.redirect() : this();
}
class ModernFactory {
factory ModernFactory() = ModernFactory.named;
ModernFactory.named();
}Configure banned-usage
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"suspicious": {
"banned-usage": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/suspicious/banned-usage: <reason>More suspicious rules
- cascade-after-null-coalescing
Flags a cascade after an unparenthesized null-coalescing expression.
- control-flow-in-finally
control_flow_in_finallyrecommendedFlags
return,break, orcontinuethat escapes afinallyblock. - empty-catches
empty_catchesrecommendedFlags empty
catchblocks. - empty-statements
empty_statementsrecommendedFlags stray empty statements (a lone
;). - no-duplicate-case-values
no_duplicate_case_valuesrecommendedFlags semantically equal constant values within one switch.
- no-empty-block
no-empty-blockFlags empty blocks (
{}). - no-equal-arguments
no-equal-argumentsFlags an argument passed more than once in the same invocation.
- no-equal-then-else
no-equal-then-elserecommendedFlags an
if/elseor ternary whose two branches are identical.