| Index: lib/src/rules/only_throw_error.dart
|
| diff --git a/lib/src/rules/only_throw_error.dart b/lib/src/rules/only_throw_error.dart
|
| deleted file mode 100644
|
| index 6b8c532db87a70b6db200ce4ad1e71995a396a1d..0000000000000000000000000000000000000000
|
| --- a/lib/src/rules/only_throw_error.dart
|
| +++ /dev/null
|
| @@ -1,84 +0,0 @@
|
| -// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
|
| -
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -library linter.src.rules.only_throw_error;
|
| -
|
| -import 'dart:collection';
|
| -import 'package:analyzer/dart/ast/ast.dart';
|
| -import 'package:analyzer/dart/ast/visitor.dart';
|
| -import 'package:analyzer/dart/element/type.dart';
|
| -import 'package:linter/src/linter.dart';
|
| -import 'package:linter/src/util/dart_type_utilities.dart';
|
| -
|
| -const _desc = r'Only throw instaces of classes extending either Exception or Error';
|
| -
|
| -const _details = r'''
|
| -
|
| -**DO** throw only instances of classes that extend dart.core.Error or
|
| -dart.core.Exception.
|
| -
|
| -**BAD:**
|
| -```
|
| -void throwString() {
|
| - throw 'hello world!'; // LINT
|
| -}
|
| -```
|
| -
|
| -**GOOD:**
|
| -```
|
| -void throwArgumentError() {
|
| - Error error = new ArgumentError('oh!');
|
| - throw error; // OK
|
| -}
|
| -```
|
| -''';
|
| -
|
| -class OnlyThrowError extends LintRule {
|
| - _Visitor _visitor;
|
| -
|
| - OnlyThrowError() : super(
|
| - name: 'only_throw_error',
|
| - description: _desc,
|
| - details: _details,
|
| - group: Group.style,
|
| - maturity: Maturity.experimental) {
|
| - _visitor = new _Visitor(this);
|
| - }
|
| -
|
| - @override
|
| - AstVisitor getVisitor() => _visitor;
|
| -}
|
| -
|
| -class _Visitor extends SimpleAstVisitor {
|
| - final LintRule rule;
|
| -
|
| - _Visitor(this.rule);
|
| -
|
| - @override
|
| - void visitThrowExpression(ThrowExpression node) {
|
| - if (node.expression is Literal) {
|
| - rule.reportLint(node);
|
| - return;
|
| - }
|
| -
|
| - if (!_isThrowable(node.expression.bestType)) {
|
| - rule.reportLint(node);
|
| - }
|
| - }
|
| -}
|
| -
|
| -const _library = 'dart.core';
|
| -const _errorClassName = 'Error';
|
| -const _exceptionClassName = 'Exception';
|
| -final LinkedHashSet<InterfaceTypeDefinition> _interfaceDefinitions =
|
| -new LinkedHashSet<InterfaceTypeDefinition>.from([
|
| - new InterfaceTypeDefinition(_exceptionClassName, _library),
|
| - new InterfaceTypeDefinition(_errorClassName, _library)
|
| -]);
|
| -
|
| -bool _isThrowable(DartType type) {
|
| - return type.isDynamic ||
|
| - DartTypeUtilities.implementsAnyInterface(type, _interfaceDefinitions);
|
| -}
|
|
|