-
Notifications
You must be signed in to change notification settings - Fork 170
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #94 from dart-lang/plugin
Plugin babysteps.
- Loading branch information
Showing
4 changed files
with
124 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// Copyright (c) 2015, 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. | ||
|
||
/// Support for client code that extends the analysis engine by adding new | ||
/// lint rules. | ||
library analyzer.plugin.linter; | ||
|
||
import 'package:linter/src/linter.dart'; | ||
import 'package:linter/src/plugin/linter_plugin.dart'; | ||
import 'package:plugin/plugin.dart'; | ||
|
||
/// The identifier of the extension point that allows plugins to register new | ||
/// lints. The object used as an extension must implement [LintRule]. | ||
final String LINT_RULE_EXTENSION_POINT_ID = Plugin.join( | ||
LinterPlugin.UNIQUE_IDENTIFIER, LinterPlugin.LINT_RULE_EXTENSION_POINT); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
// Copyright (c) 2015, 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.plugin.linter_plugin; | ||
|
||
import 'package:linter/plugin/linter.dart'; | ||
import 'package:linter/src/linter.dart'; | ||
import 'package:linter/src/rules/camel_case_types.dart'; | ||
import 'package:linter/src/rules/constant_identifier_names.dart'; | ||
import 'package:linter/src/rules/empty_constructor_bodies.dart'; | ||
import 'package:linter/src/rules/library_names.dart'; | ||
import 'package:linter/src/rules/library_prefixes.dart'; | ||
import 'package:linter/src/rules/non_constant_identifier_names.dart'; | ||
import 'package:linter/src/rules/one_member_abstracts.dart'; | ||
import 'package:linter/src/rules/slash_for_doc_comments.dart'; | ||
import 'package:linter/src/rules/super_goes_last.dart'; | ||
import 'package:linter/src/rules/type_init_formals.dart'; | ||
import 'package:linter/src/rules/unnecessary_brace_in_string_interp.dart'; | ||
import 'package:plugin/plugin.dart'; | ||
|
||
/// The shared linter plugin instance. | ||
final LinterPlugin linterPlugin = new LinterPlugin(); | ||
|
||
/// A plugin that defines the extension points and extensions that are | ||
/// inherently defined by the linter. | ||
class LinterPlugin implements Plugin { | ||
|
||
/// The unique identifier of this plugin. | ||
static const String UNIQUE_IDENTIFIER = 'linter.core'; | ||
|
||
/// The simple identifier of the extension point that allows plugins to | ||
/// register new lint rules. | ||
static const String LINT_RULE_EXTENSION_POINT = 'rule'; | ||
|
||
/// The extension point that allows plugins to register new lint rules. | ||
ExtensionPoint lintRuleExtensionPoint; | ||
|
||
/// Return a list containing all contributed lint rules. | ||
List<LintRule> get lintRules => lintRuleExtensionPoint.extensions; | ||
|
||
@override | ||
String get uniqueIdentifier => UNIQUE_IDENTIFIER; | ||
|
||
@override | ||
void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { | ||
lintRuleExtensionPoint = registerExtensionPoint( | ||
LINT_RULE_EXTENSION_POINT, _validateTaskExtension); | ||
} | ||
|
||
@override | ||
void registerExtensions(RegisterExtension registerExtension) { | ||
/// A subset of rules that we are considering enabled by "default". | ||
[ | ||
new CamelCaseTypes(), | ||
new ConstantIdentifierNames(), | ||
new EmptyConstructorBodies(), | ||
new LibraryNames(), | ||
new LibraryPrefixes(), | ||
new NonConstantIdentifierNames(), | ||
new OneMemberAbstracts(), | ||
new SlashForDocComments(), | ||
new SuperGoesLast(), | ||
new TypeInitFormals(), | ||
new UnnecessaryBraceInStringInterp() | ||
].forEach((LintRule rule) => | ||
registerExtension(LINT_RULE_EXTENSION_POINT_ID, rule)); | ||
} | ||
|
||
void _validateTaskExtension(Object extension) { | ||
if (extension is! LintRule) { | ||
String id = lintRuleExtensionPoint.uniqueIdentifier; | ||
throw new ExtensionError('Extensions to $id must implement LintRule'); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters