1
- use clippy_utils:: diagnostics:: span_lint_and_note ;
1
+ use clippy_utils:: diagnostics:: span_lint_and_then ;
2
2
use clippy_utils:: paths;
3
3
use clippy_utils:: ty:: match_type;
4
4
use rustc_ast:: ast:: LitKind ;
@@ -8,11 +8,11 @@ use rustc_session::{declare_lint_pass, declare_tool_lint};
8
8
9
9
declare_clippy_lint ! {
10
10
/// ### What it does
11
- /// Checks for calls to `std::fs::Permissions.set_readonly` with argument `false`
11
+ /// Checks for calls to `std::fs::Permissions.set_readonly` with argument `false`.
12
12
///
13
13
/// ### Why is this bad?
14
- /// On Unix platforms this results in the file being world writable
15
- ///
14
+ /// On Unix platforms this results in the file being world writable,
15
+ /// equivalent to `chmod a+w <file>`.
16
16
/// ### Example
17
17
/// ```rust
18
18
/// use std::fs::File;
@@ -32,18 +32,21 @@ impl<'tcx> LateLintPass<'tcx> for PermissionsSetReadonlyFalse {
32
32
fn check_expr ( & mut self , cx : & LateContext < ' tcx > , expr : & ' tcx Expr < ' tcx > ) {
33
33
if let ExprKind :: MethodCall ( path, receiver, [ arg] , _) = & expr. kind
34
34
&& match_type ( cx, cx. typeck_results ( ) . expr_ty ( receiver) , & paths:: PERMISSIONS )
35
- && path. ident . name == sym ! ( set_readonly)
36
- && let ExprKind :: Lit ( lit) = & arg. kind
37
- && LitKind :: Bool ( false ) == lit. node
35
+ && path. ident . name == sym ! ( set_readonly)
36
+ && let ExprKind :: Lit ( lit) = & arg. kind
37
+ && LitKind :: Bool ( false ) == lit. node
38
38
{
39
- span_lint_and_note (
40
- cx,
41
- PERMISSIONS_SET_READONLY_FALSE ,
42
- expr. span ,
43
- "call to `set_readonly` with argument `false`" ,
44
- None ,
45
- "on Unix platforms this results in the file being world writable" ,
46
- ) ;
39
+ span_lint_and_then (
40
+ cx,
41
+ PERMISSIONS_SET_READONLY_FALSE ,
42
+ expr. span ,
43
+ "call to `set_readonly` with argument `false`" ,
44
+ |diag| {
45
+ diag. note ( "on Unix platforms this results in the file being world writable" ) ;
46
+ diag. help ( "you can set the desired permissions using `PermissionsExt`. For more information, see\n \
47
+ https://doc.rust-lang.org/std/os/unix/fs/trait.PermissionsExt.html") ;
48
+ }
49
+ ) ;
47
50
}
48
51
}
49
52
}
0 commit comments