Merge pull request #2654 from killercup/feature/lint-groups-in-docs

Show/Filter by lint groups in docs
This commit is contained in:
Oliver Schneider 2018-04-10 13:09:27 +02:00 committed by GitHub
commit 94e897851b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 58 additions and 18 deletions

View File

@ -18,6 +18,7 @@ This lint has the following configuration variables:
def parse_lint_def(lint): def parse_lint_def(lint):
lint_dict = {} lint_dict = {}
lint_dict['id'] = lint.name lint_dict['id'] = lint.name
lint_dict['group'] = lint.group
lint_dict['level'] = lint.level lint_dict['level'] = lint.level
lint_dict['docs'] = {} lint_dict['docs'] = {}

View File

@ -11,8 +11,17 @@
<style> <style>
blockquote { font-size: 1em; } blockquote { font-size: 1em; }
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { display: none !important; } [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { display: none !important; }
.panel .anchor { display: none; }
.panel:hover .anchor { display: inline; color: #fff; } .form-inline .checkbox { margin-right: 0.6em }
.panel-title { display: flex; }
.panel-title .label { display: inline-block; }
.panel-title-name { flex: 1; }
.panel-title-name span { vertical-align: bottom; }
.panel .panel-title-name .anchor { display: none; }
.panel:hover .panel-title-name .anchor { display: inline; color: #fff; }
</style> </style>
</head> </head>
<body> <body>
@ -23,7 +32,7 @@
<noscript> <noscript>
<div class="alert alert-danger" role="alert"> <div class="alert alert-danger" role="alert">
Sorry, this site only works with JavaScript! Sorry, this site only works with JavaScript! :(
</div> </div>
</noscript> </noscript>
@ -40,7 +49,8 @@
<div class="panel-body row"> <div class="panel-body row">
<div class="col-md-6 form-inline"> <div class="col-md-6 form-inline">
<div class="form-group form-group-lg"> <div class="form-group form-group-lg">
<div class="checkbox" ng-repeat="(level, enabled) in levels" style="margin-right: 0.6em"> <p class="h4">Lint levels</p>
<div class="checkbox" ng-repeat="(level, enabled) in levels">
<label> <label>
<input type="checkbox" ng-model="levels[level]" /> <input type="checkbox" ng-model="levels[level]" />
{{level}} {{level}}
@ -48,7 +58,20 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6 form-inline">
<div class="form-group form-group-lg">
<p class="h4">Lint groups</p>
<div class="checkbox" ng-repeat="(group, enabled) in groups">
<label class="text-capitalize">
<input type="checkbox" ng-model="groups[group]" />
{{group}}
</label>
</div>
</div>
</div>
</div>
<div class="panel-body row">
<div class="col-md-12 form-horizontal">
<div class="input-group"> <div class="input-group">
<span class="input-group-addon" id="filter-label">Filter:</span> <span class="input-group-addon" id="filter-label">Filter:</span>
<input type="text" class="form-control" placeholder="Keywords or search string" aria-describedby="filter-label" ng-model="search" /> <input type="text" class="form-control" placeholder="Keywords or search string" aria-describedby="filter-label" ng-model="search" />
@ -63,22 +86,27 @@
</div> </div>
<article class="panel panel-default" id="{{lint.id}}" <article class="panel panel-default" id="{{lint.id}}"
ng-repeat="lint in data | filter:byLevels | filter:search | orderBy:'id' track by lint.id" on-finish-render="ngRepeatFinished"> ng-repeat="lint in data | filter:byLevels | filter:byGroups | filter:search | orderBy:'id' track by lint.id" on-finish-render="ngRepeatFinished">
<header class="panel-heading" ng-click="open[lint.id] = !open[lint.id]"> <header class="panel-heading" ng-click="open[lint.id] = !open[lint.id]">
<button class="btn btn-default btn-sm pull-right" style="margin-top: -6px;">
<span ng-show="open[lint.id]">&minus;</span>
<span ng-hide="open[lint.id]">&plus;</span>
</button>
<h2 class="panel-title"> <h2 class="panel-title">
{{lint.id}} <div class="panel-title-name">
<span>{{lint.id}}</span>
<a href="#{{lint.id}}" class="anchor label label-default" ng-click="open[lint.id] = true; $event.stopPropagation()">&para;</a>
</div>
<span ng-if="lint.level == 'Allow'" class="label label-info">Allow</span> <div class="panel-title-addons">
<span ng-if="lint.level == 'Warn'" class="label label-warning">Warn</span> <span class="label label-default text-capitalize">{{lint.group}}</span>
<span ng-if="lint.level == 'Deny'" class="label label-danger">Deny</span>
<span ng-if="lint.level == 'Deprecated'" class="label label-default">Deprecated</span>
<a href="#{{lint.id}}" class="anchor label label-default" ng-click="open[lint.id] = true; $event.stopPropagation()">&para;</a> <span ng-if="lint.level == 'Allow'" class="label label-success">Allow</span>
<span ng-if="lint.level == 'Warn'" class="label label-warning">Warn</span>
<span ng-if="lint.level == 'Deny'" class="label label-danger">Deny</span>
<span ng-if="lint.level == 'Deprecated'" class="label label-default">Deprecated</span>
<button class="btn btn-default btn-xs">
<span ng-show="open[lint.id]">&minus;</span>
<span ng-hide="open[lint.id]">&plus;</span>
</button>
</div>
</h2> </h2>
</header> </header>
@ -95,7 +123,7 @@
</div> </div>
<a href="https://github.com/rust-lang-nursery/rust-clippy"> <a href="https://github.com/rust-lang-nursery/rust-clippy">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"/> <img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on Github"/>
</a> </a>
<script src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/7.0.0/markdown-it.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/7.0.0/markdown-it.min.js"></script>
@ -166,6 +194,11 @@
return $scope.levels[lint.level]; return $scope.levels[lint.level];
}; };
$scope.groups = {};
$scope.byGroups = function (lint) {
return $scope.groups[lint.group];
};
// Get data // Get data
$scope.open = {}; $scope.open = {};
$scope.loading = true; $scope.loading = true;
@ -181,6 +214,12 @@
$scope.data = data; $scope.data = data;
$scope.loading = false; $scope.loading = false;
// Initialize lint groups (the same structure is also used to enable filtering)
$scope.groups = data.reduce(function (result, val) {
result[val.group] = true;
return result;
}, {});
scrollToLintByURL($scope); scrollToLintByURL($scope);
}) })
.error(function (data) { .error(function (data) {