Skip to content

Commit

Permalink
Auto merge of rust-lang#12655 - SpencerAWill:Add-applicability-filter…
Browse files Browse the repository at this point in the history
…, r=xFrednet

Add applicability filter to lint list page

changelog: Add applicability filter to lint list website.
Fixes rust-lang#7958

Desktop view:
![image](https://github.com/rust-lang/rust-clippy/assets/43732866/ef16dff1-c1c5-48a7-aa5c-ddd504280c90)

Mobile view:
![image](https://github.com/rust-lang/rust-clippy/assets/43732866/9e6f54d9-b079-443f-a6b0-ca8ee4ed1eed)
  • Loading branch information
bors committed Jun 18, 2024
2 parents 7e1ed1a + c8a7e6e commit bd75e44
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 4 deletions.
34 changes: 30 additions & 4 deletions util/gh-pages/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
@media (min-width: 405px) {
#upper-filters {
display: flex;
flex-wrap: wrap;
}
}

Expand Down Expand Up @@ -404,7 +405,7 @@ <h1>Clippy Lints</h1>

<div class="panel panel-default" ng-show="data">
<div class="panel-body row">
<div id="upper-filters" class="col-12 col-md-4">
<div id="upper-filters" class="col-12 col-md-6">
<div class="btn-group" filter-dropdown>
<button type="button" class="btn btn-default dropdown-toggle">
Lint levels <span class="badge">{{selectedValuesCount(levels)}}</span> <span class="caret"></span>
Expand Down Expand Up @@ -496,9 +497,34 @@ <h1>Clippy Lints</h1>
</ul>
</div>
</div>

<div class="btn-group" filter-dropdown>
<button type="button" class="btn btn-default dropdown-toggle">
Applicability <span class="badge">{{selectedValuesCount(applicabilities)}}</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li class="checkbox">
<label ng-click="toggleApplicabilities(true)">
<input type="checkbox" class="invisible" />
All
</label>
</li>
<li class="checkbox">
<label ng-click="toggleApplicabilities(false)">
<input type="checkbox" class="invisible" />
None
</label>
</li>
<li role="separator" class="divider"></li>
<li class="checkbox" ng-repeat="(applicability, enabled) in applicabilities">
<label class="text-capitalize">
<input type="checkbox" ng-model="applicabilities[applicability]" />
{{applicability}}
</label>
</li>
</ul>
</div>
</div>
<div class="col-12 col-md-7 search-control">
<div class="col-12 col-md-6 search-control">
<div class="input-group">
<label class="input-group-addon" id="filter-label" for="search-input">Filter:</label>
<input type="text" class="form-control filter-input" placeholder="Keywords or search string" id="search-input"
Expand All @@ -514,7 +540,7 @@ <h1>Clippy Lints</h1>
</div>
</div>
<!-- The order of the filters should be from most likely to remove a lint to least likely to improve performance. -->
<article class="panel panel-default" id="{{lint.id}}" ng-repeat="lint in data | filter:bySearch | filter:byGroups | filter:byLevels | filter:byVersion">
<article class="panel panel-default" id="{{lint.id}}" ng-repeat="lint in data | filter:bySearch | filter:byGroups | filter:byLevels | filter:byVersion | filter:byApplicabilities">
<header class="panel-heading" ng-click="open[lint.id] = !open[lint.id]">
<h2 class="panel-title">
<div class="panel-title-name">
Expand Down
33 changes: 33 additions & 0 deletions util/gh-pages/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,18 @@
Object.entries(versionFilterKeyMap).map(([key, value]) => [value, key])
);

const APPLICABILITIES_FILTER_DEFAULT = {
Unspecified: true,
Unresolved: true,
MachineApplicable: true,
MaybeIncorrect: true,
HasPlaceholders: true
};

$scope.applicabilities = {
...APPLICABILITIES_FILTER_DEFAULT
}

// loadFromURLParameters retrieves filter settings from the URL parameters and assigns them
// to corresponding $scope variables.
function loadFromURLParameters() {
Expand All @@ -182,6 +194,7 @@

handleParameter('levels', $scope.levels, LEVEL_FILTERS_DEFAULT);
handleParameter('groups', $scope.groups, GROUPS_FILTER_DEFAULT);
handleParameter('applicabilities', $scope.applicabilities, APPLICABILITIES_FILTER_DEFAULT);

// Handle 'versions' parameter separately because it needs additional processing
if (urlParameters.versions) {
Expand Down Expand Up @@ -249,6 +262,7 @@
updateURLParameter($scope.levels, 'levels', LEVEL_FILTERS_DEFAULT);
updateURLParameter($scope.groups, 'groups', GROUPS_FILTER_DEFAULT);
updateVersionURLParameter($scope.versionFilters);
updateURLParameter($scope.applicabilities, 'applicabilities', APPLICABILITIES_FILTER_DEFAULT);
}

// Add $watches to automatically update URL parameters when the data changes
Expand All @@ -270,6 +284,12 @@
}
}, true);

$scope.$watch('applicabilities', function (newVal, oldVal) {
if (newVal !== oldVal) {
updateURLParameter(newVal, 'applicabilities', APPLICABILITIES_FILTER_DEFAULT)
}
}, true);

// Watch for changes in the URL path and update the search and lint display
$scope.$watch(function () { return $location.path(); }, function (newPath) {
const searchParameter = newPath.substring(1);
Expand Down Expand Up @@ -327,6 +347,15 @@
}
};

$scope.toggleApplicabilities = function (value) {
const applicabilities = $scope.applicabilities;
for (const key in applicabilities) {
if (applicabilities.hasOwnProperty(key)) {
applicabilities[key] = value;
}
}
}

$scope.resetGroupsToDefault = function () {
$scope.groups = {
...GROUPS_FILTER_DEFAULT
Expand Down Expand Up @@ -430,6 +459,10 @@
return true;
}

$scope.byApplicabilities = function (lint) {
return $scope.applicabilities[lint.applicability.applicability];
};

// Show details for one lint
$scope.openLint = function (lint) {
$scope.open[lint.id] = true;
Expand Down

0 comments on commit bd75e44

Please sign in to comment.