]> git.lizzy.rs Git - rust.git/blobdiff - clippy_lints/src/option_env_unwrap.rs
Auto merge of #84039 - jyn514:uplift-atomic-ordering, r=wesleywiser
[rust.git] / clippy_lints / src / option_env_unwrap.rs
index e0e8a95acd5837beb50e16bb7f9abe23620911b2..d7306628030f6ddc3d02a7a134e7ac01959d2f16 100644 (file)
@@ -1,22 +1,22 @@
-use crate::utils::{is_direct_expn_of, span_lint_and_help};
+use clippy_utils::diagnostics::span_lint_and_help;
+use clippy_utils::is_direct_expn_of;
 use if_chain::if_chain;
-use rustc::lint::in_external_macro;
+use rustc_ast::ast::{Expr, ExprKind};
 use rustc_lint::{EarlyContext, EarlyLintPass};
 use rustc_session::{declare_lint_pass, declare_tool_lint};
-use syntax::ast::*;
+use rustc_span::sym;
 
 declare_clippy_lint! {
-    /// **What it does:** Checks for usage of `option_env!(...).unwrap()` and
+    /// ### What it does
+    /// Checks for usage of `option_env!(...).unwrap()` and
     /// suggests usage of the `env!` macro.
     ///
-    /// **Why is this bad?** Unwrapping the result of `option_env!` will panic
+    /// ### Why is this bad?
+    /// Unwrapping the result of `option_env!` will panic
     /// at run-time if the environment variable doesn't exist, whereas `env!`
     /// catches it at compile-time.
     ///
-    /// **Known problems:** None.
-    ///
-    /// **Example:**
-    ///
+    /// ### Example
     /// ```rust,no_run
     /// let _ = option_env!("HOME").unwrap();
     /// ```
@@ -36,9 +36,8 @@
 impl EarlyLintPass for OptionEnvUnwrap {
     fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
         if_chain! {
-            if !in_external_macro(cx.sess, expr.span);
-            if let ExprKind::MethodCall(path_segment, args) = &expr.kind;
-            if path_segment.ident.as_str() == "unwrap";
+            if let ExprKind::MethodCall(path_segment, args, _) = &expr.kind;
+            if matches!(path_segment.ident.name, sym::expect | sym::unwrap);
             if let ExprKind::Call(caller, _) = &args[0].kind;
             if is_direct_expn_of(caller.span, "option_env").is_some();
             then {
@@ -46,7 +45,8 @@ fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
                     cx,
                     OPTION_ENV_UNWRAP,
                     expr.span,
-                    "this will panic at run-time if the environment variable doesn't exist",
+                    "this will panic at run-time if the environment variable doesn't exist at compile-time",
+                    None,
                     "consider using the `env!` macro instead"
                 );
             }