def test_from_clang_fixit(self): joined_file = 'struct { int f0; }\nx = { f0 :1 };\n' file = joined_file.splitlines(True) fixed_file = ['struct { int f0; }\n', 'x = { .f0 = 1 };\n'] tu = Index.create().parse('t.c', unsaved_files=[('t.c', joined_file)]) fixit = tu.diagnostics[0].fixits[0] clang_fixed_file = Diff.from_clang_fixit(fixit, file).modified self.assertEqual(fixed_file, clang_fixed_file)
def test_from_clang_fixit(self): joined_file = 'struct { int f0; }\nx = { f0 :1 };\n' file = joined_file.splitlines(True) fixed_file = ['struct { int f0; }\n', 'x = { .f0 = 1 };\n'] tu = Index.create().parse('t.c', unsaved_files=[ ('t.c', joined_file)]) fixit = tu.diagnostics[0].fixits[0] clang_fixed_file = Diff.from_clang_fixit(fixit, file).modified self.assertEqual(fixed_file, clang_fixed_file)
def run(self, filename, file, clang_cli_options: typed_list(str)=None): """ Check code for syntactical or semantical problems using Clang. This bear supports automatic fixes. :param clang_cli_options: Any options that will be passed through to Clang. """ index = Index.create() diagnostics = index.parse( filename, args=clang_cli_options, unsaved_files=[(filename, ''.join(file))]).diagnostics for diag in diagnostics: severity = {0: RESULT_SEVERITY.INFO, 1: RESULT_SEVERITY.INFO, 2: RESULT_SEVERITY.NORMAL, 3: RESULT_SEVERITY.MAJOR, 4: RESULT_SEVERITY.MAJOR}.get(diag.severity) affected_code = tuple(SourceRange.from_clang_range(range) for range in diag.ranges) diffs = None fixits = list(diag.fixits) if len(fixits) > 0: # FIXME: coala doesn't support choice of diffs, for now # append first one only, often there's only one anyway diffs = {filename: Diff.from_clang_fixit(fixits[0], file)} # No affected code yet? Let's derive it from the fix! if len(affected_code) == 0: affected_code = diffs[filename].affected_code(filename) # Still no affected code? Position is the best we can get... if len(affected_code) == 0 and diag.location.file is not None: affected_code = (SourceRange.from_values( diag.location.file.name, diag.location.line, diag.location.column),) yield Result( self, diag.spelling, severity=severity, affected_code=affected_code, diffs=diffs)
def test_from_clang_fixit(self): try: from clang.cindex import Index, LibclangError except ImportError as err: raise SkipTest(str(err)) joined_file = "struct { int f0; }\nx = { f0 :1 };\n" file = joined_file.splitlines(True) fixed_file = ["struct { int f0; }\n", "x = { .f0 = 1 };\n"] try: tu = Index.create().parse("t.c", unsaved_files=[("t.c", joined_file)]) except LibclangError as err: raise SkipTest(str(err)) fixit = tu.diagnostics[0].fixits[0] clang_fixed_file = Diff.from_clang_fixit(fixit, file).modified self.assertEqual(fixed_file, clang_fixed_file)
def test_from_clang_fixit(self): try: from clang.cindex import Index, LibclangError except ImportError as err: raise unittest.case.SkipTest(str(err)) joined_file = 'struct { int f0; }\nx = { f0 :1 };\n' file = joined_file.splitlines(True) fixed_file = ['struct { int f0; }\n', 'x = { .f0 = 1 };\n'] try: tu = Index.create().parse('t.c', unsaved_files=[('t.c', joined_file)]) except LibclangError as err: raise unittest.case.SkipTest(str(err)) fixit = tu.diagnostics[0].fixits[0] clang_fixed_file = Diff.from_clang_fixit(fixit, file).modified self.assertEqual(fixed_file, clang_fixed_file)