Skip to content

Commit

Permalink
Auto merge of #4270 - flip1995:rollup-piifrj5, r=flip1995
Browse files Browse the repository at this point in the history
Rollup of 2 pull requests

Successful merges:

 - #4229 (don't strip blank lines in lint documentation)
 - #4268 (Fix bug in `implicit_hasher` causing crashes)

Failed merges:

r? @ghost
  • Loading branch information
bors committed Jul 12, 2019
2 parents b029042 + a21c00c commit 94146d5
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 22 deletions.
3 changes: 3 additions & 0 deletions clippy_lints/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2038,6 +2038,9 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for ImplicitHasher {
vis.visit_ty(ty);

for target in &vis.found {
if in_external_macro(cx.sess(), generics.span) {
continue;
}
let generics_suggestion_span = generics.span.substitute_dummy({
let pos = snippet_opt(cx, item.span.until(body.arguments[0].pat.span))
.and_then(|snip| {
Expand Down
6 changes: 6 additions & 0 deletions tests/ui/auxiliary/implicit_hasher_macros.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#[macro_export]
macro_rules! implicit_hasher_fn {
() => {
pub fn f(input: &HashMap<u32, u32>) {}
};
}
7 changes: 7 additions & 0 deletions tests/ui/implicit_hasher.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
// aux-build:implicit_hasher_macros.rs
#![allow(unused)]

#[macro_use]
extern crate implicit_hasher_macros;

use std::cmp::Eq;
use std::collections::{HashMap, HashSet};
use std::hash::{BuildHasher, Hash};
Expand Down Expand Up @@ -88,4 +92,7 @@ gen!(fn bar);
pub mod test_macro;
__implicit_hasher_test_macro!(impl<K, V> for HashMap<K, V> where V: test_macro::A);

// #4260
implicit_hasher_fn!();

fn main() {}
20 changes: 10 additions & 10 deletions tests/ui/implicit_hasher.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: impl for `HashMap` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:11:35
--> $DIR/implicit_hasher.rs:15:35
|
LL | impl<K: Hash + Eq, V> Foo<i8> for HashMap<K, V> {
| ^^^^^^^^^^^^^
Expand All @@ -15,7 +15,7 @@ LL | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default:
| ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: impl for `HashMap` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:20:36
--> $DIR/implicit_hasher.rs:24:36
|
LL | impl<K: Hash + Eq, V> Foo<i8> for (HashMap<K, V>,) {
| ^^^^^^^^^^^^^
Expand All @@ -29,7 +29,7 @@ LL | ((HashMap::default(),), (HashMap::with_capacity_and_hasher(10, Defa
| ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: impl for `HashMap` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:25:19
--> $DIR/implicit_hasher.rs:29:19
|
LL | impl Foo<i16> for HashMap<String, String> {
| ^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -43,7 +43,7 @@ LL | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default:
| ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: impl for `HashSet` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:42:32
--> $DIR/implicit_hasher.rs:46:32
|
LL | impl<T: Hash + Eq> Foo<i8> for HashSet<T> {
| ^^^^^^^^^^
Expand All @@ -57,7 +57,7 @@ LL | (HashSet::default(), HashSet::with_capacity_and_hasher(10, Default:
| ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: impl for `HashSet` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:47:19
--> $DIR/implicit_hasher.rs:51:19
|
LL | impl Foo<i16> for HashSet<String> {
| ^^^^^^^^^^^^^^^
Expand All @@ -71,7 +71,7 @@ LL | (HashSet::default(), HashSet::with_capacity_and_hasher(10, Default:
| ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: parameter of type `HashMap` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:64:23
--> $DIR/implicit_hasher.rs:68:23
|
LL | pub fn foo(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32>) {}
| ^^^^^^^^^^^^^^^^^
Expand All @@ -81,7 +81,7 @@ LL | pub fn foo<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32, S>, _s
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^

error: parameter of type `HashSet` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:64:53
--> $DIR/implicit_hasher.rs:68:53
|
LL | pub fn foo(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32>) {}
| ^^^^^^^^^^^^
Expand All @@ -91,7 +91,7 @@ LL | pub fn foo<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32>, _set:
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^

error: impl for `HashMap` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:68:43
--> $DIR/implicit_hasher.rs:72:43
|
LL | impl<K: Hash + Eq, V> Foo<u8> for HashMap<K, V> {
| ^^^^^^^^^^^^^
Expand All @@ -108,7 +108,7 @@ LL | (HashMap::default(), HashMap::with_capacity_and_hasher(10,
| ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: parameter of type `HashMap` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:76:33
--> $DIR/implicit_hasher.rs:80:33
|
LL | pub fn $name(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32>) {}
| ^^^^^^^^^^^^^^^^^
Expand All @@ -121,7 +121,7 @@ LL | pub fn $name<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^

error: parameter of type `HashSet` should be generalized over different hashers
--> $DIR/implicit_hasher.rs:76:63
--> $DIR/implicit_hasher.rs:80:63
|
LL | pub fn $name(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32>) {}
| ^^^^^^^^^^^^
Expand Down
21 changes: 9 additions & 12 deletions util/export.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

# Build the gh-pages

from collections import OrderedDict
import re
import sys
import json
Expand All @@ -21,33 +22,29 @@ def parse_lint_def(lint):
lint_dict['id'] = lint.name
lint_dict['group'] = lint.group
lint_dict['level'] = lint.level
lint_dict['docs'] = {}
lint_dict['docs'] = OrderedDict()

last_section = None

for line in lint.doc:
if len(line.strip()) == 0 and not last_section.startswith("Example"):
continue

match = re.match(lint_subheadline, line)
if match:
last_section = match.groups()[0]
if match:
text = match.groups()[1]
else:
text = line

if not last_section:
log.warn("Skipping comment line as it was not preceded by a heading")
log.warning("Skipping comment line as it was not preceded by a heading")
log.debug("in lint `%s`, line `%s`", lint.name, line)

fragment = lint_dict['docs'].get(last_section, "")
if text == "\n":
line = fragment + text
else:
line = (fragment + "\n" + text).strip()
if last_section not in lint_dict['docs']:
lint_dict['docs'][last_section] = ""

lint_dict['docs'][last_section] += text + "\n"

lint_dict['docs'][last_section] = line
for section in lint_dict['docs']:
lint_dict['docs'][section] = lint_dict['docs'][section].strip()

return lint_dict

Expand Down

0 comments on commit 94146d5

Please sign in to comment.