tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ExplicitImplicitChecker.cpp (1319B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include "ExplicitImplicitChecker.h"
      6 #include "CustomMatchers.h"
      7 
      8 void ExplicitImplicitChecker::registerMatchers(MatchFinder *AstMatcher) {
      9  AstMatcher->addMatcher(
     10      cxxConstructorDecl(
     11          isInterestingImplicitCtor(),
     12          ofClass(allOf(isConcreteClass(), decl().bind("class"))),
     13          unless(isMarkedImplicit()))
     14          .bind("ctor"),
     15      this);
     16 }
     17 
     18 void ExplicitImplicitChecker::check(const MatchFinder::MatchResult &Result) {
     19  // We've already checked everything in the matcher, so we just have to report
     20  // the error.
     21 
     22  const CXXConstructorDecl *Ctor =
     23      Result.Nodes.getNodeAs<CXXConstructorDecl>("ctor");
     24  const CXXRecordDecl *Declaration =
     25      Result.Nodes.getNodeAs<CXXRecordDecl>("class");
     26 
     27  FixItHint FixItHint =
     28      FixItHint::CreateInsertion(Ctor->getLocation(), "explicit ");
     29  diag(Ctor->getLocation(), "bad implicit conversion constructor for %0",
     30       DiagnosticIDs::Error)
     31      << Declaration->getDeclName();
     32  diag(Ctor->getLocation(),
     33       "consider adding the explicit keyword to the constructor",
     34       DiagnosticIDs::Note)
     35      << FixItHint;
     36 }