def test_two_severity_3(self):
        source_file = test_support.create_tempfile(["int8 a;", "int8 b;"])
        translation_unit = tu_parser.create_translation_unit(source_file)
        self.assertTrue(translation_unit)

        diags = diagnostics.get_diagnostics_by_severity(translation_unit)
        self.assertEqual(diags[source_file]["3"], 2)
 def test_unused_variable(self):
     tu = tu_parser.create_translation_unit(
         test_support.create_tempfile(
             ["int main()", "{", "int a;", "return 0;", "}"]))
     violations = clang_warning_checker.check_for_clang_warnings(tu)
     self.assertEqual(len(violations), 1)
     self.assertEqual(violations[0].id, "TIDY_CLANG_UNUSED_VARIABLE")
     self.assertEqual(violations[0].message, "unused variable 'a'")
    def test_get_diagnostics_by_severity_one_tu(self):
        source_file = test_support.create_tempfile(["int a;"])
        translation_unit = tu_parser.create_translation_unit(source_file)
        self.assertTrue(translation_unit)

        diags = diagnostics.get_diagnostics_by_severity_one_tu(
            translation_unit)
        self.assertEqual(diags["2"], 1)
 def test_impl_conversion(self):
     tu = tu_parser.create_translation_unit(
         test_support.create_tempfile([
             "#include <cstdint>", "std::uint8_t F();", "uint8_t F()", "{",
             "int a=1;", "return a;", "}"
         ]))
     violations = clang_warning_checker.check_for_clang_warnings(tu)
     self.assertEqual(len(violations), 1)
     self.assertEqual(violations[0].id,
                      "TIDY_CLANG_IMPLICIT_INT_CONVERSION")
     self.assertEqual(
         violations[0].message,
         "implicit conversion loses integer precision: 'int' to 'uint8_t' (aka 'unsigned char')",
     )
Exemple #5
0
def parse_single_command(command):
    """Parses a command and returns a translation unit"""
    absolute_file_name = os.path.join(command.directory, command.filename)
    logging.info(
        colored("Parsing file '%s'", "green"),
        utils.make_link(absolute_file_name),
    )
    logging.debug("Using file name (not absolute path) '%s'",
                  utils.only_filename(command.filename))
    logging.debug("Using directory '%s'", command.directory)
    logging.debug("Using arguments '%s'", list(command.arguments))
    translation_unit = tu_parser.create_translation_unit(
        absolute_file_name, list(command.arguments), command.directory)
    return translation_unit
Exemple #6
0
def main():
    """Binary main entry point"""
    args = parse_args()
    logging.basicConfig(level=logging.INFO)
    clang_setup.setup_clang()

    the_file = args.file
    the_arguments = args.arguments

    # Use compdb infos if available
    if args.compdb:
        the_file, the_arguments = parse_from_compdb(args.compdb, args.file)
        if the_file == None:
            sys.exit(f"ERROR: File '{args.file}'' not found in compdb")

    # Only parse the file provided by the args
    logging.info(colored("Parsing file %s", "cyan"), the_file)
    logging.info(colored("Using arguments\n%s", "cyan"),
                 pformat(the_arguments))
    translation_unit = tu_parser.create_translation_unit(
        the_file, the_arguments)
    if not translation_unit:
        sys.exit(f"ERROR: Unable to load input for file '{the_file}'")

    # Dump the content
    if not args.diagnostics_only:
        tu_dump = get_info(translation_unit.cursor, args.max_depth, 0,
                           args.details, args.references)
        logging.info(
            colored(
                pformat(("nodes", tu_dump), width=120),
                attrs=["dark"],
            ))

    # Dump the diagnostics
    tu_diags = [
        diagnostics.get_diag_info(diagnostic)
        for diagnostic in translation_unit.diagnostics
    ]
    logging.info(colored(pformat(("diagnostics", tu_diags)), "yellow"))

    sys.exit(0)
 def test_non_location_warning(self):
     tu = tu_parser.create_translation_unit(test_support.create_tempfile(
         [""]),
                                            args=["clang++"])
     violations = clang_warning_checker.check_for_clang_warnings(tu)
     self.assertEqual(len(violations), 0)
Exemple #8
0
 def dump(self, source_file, args=[]):
     translation_unit = tu_parser.create_translation_unit(source_file, args)
     logging.debug(
         pformat(("nodes", dump.get_info(translation_unit.cursor))))
Exemple #9
0
 def apply_checker(self, rule, source_file, args=[]):
     translation_unit = tu_parser.create_translation_unit(source_file, args)
     self.assertTrue(translation_unit)
     violations = checker.apply_checker(translation_unit, rule)
     return violations, translation_unit.diagnostics