forked from OSchip/llvm-project
Clean up the CIndex interface to diagnostic ranges. Thanks, Daniel!
llvm-svn: 95602
This commit is contained in:
parent
ebc970e4eb
commit
4b8fd6d3d3
|
@ -448,30 +448,26 @@ CINDEX_LINKAGE CXSourceLocation clang_getDiagnosticLocation(CXDiagnostic);
|
|||
CINDEX_LINKAGE CXString clang_getDiagnosticSpelling(CXDiagnostic);
|
||||
|
||||
/**
|
||||
* \brief Retrieve the source ranges associated with the diagnostic.
|
||||
* \brief Determine the number of source ranges associated with the given
|
||||
* diagnostic.
|
||||
*/
|
||||
CINDEX_LINKAGE unsigned clang_getDiagnosticNumRanges(CXDiagnostic);
|
||||
|
||||
/**
|
||||
* \brief Retrieve a source range associated with the diagnostic.
|
||||
*
|
||||
* These source ranges highlight important elements in the source
|
||||
* A diagnostic's source ranges highlight important elements in the source
|
||||
* code. On the command line, Clang displays source ranges by
|
||||
* underlining them with '~' characters.
|
||||
*
|
||||
* \param Diagnostic the diagnostic whose ranges are being extracted.
|
||||
* \param Diagnostic the diagnostic whose range is being extracted.
|
||||
*
|
||||
* \param Ranges [out] will be set to a newly-allocated array
|
||||
* containing the source ranges of this diagnostic. These ranges must
|
||||
* be freed with \c clang_disposeDiagnosticRanges().
|
||||
* \param Range the zero-based index specifying which range to
|
||||
*
|
||||
* \param NumRanges [out] will be set to the number of source ranges
|
||||
* in the \p Ranges array.
|
||||
* \returns the requested source range.
|
||||
*/
|
||||
CINDEX_LINKAGE void clang_getDiagnosticRanges(CXDiagnostic Diagnostic,
|
||||
CXSourceRange **Ranges,
|
||||
unsigned *NumRanges);
|
||||
|
||||
/**
|
||||
* \brief Free the source ranges returned by \c clang_getDiagnosticRanges().
|
||||
*/
|
||||
CINDEX_LINKAGE void clang_disposeDiagnosticRanges(CXSourceRange *Ranges,
|
||||
unsigned NumRanges);
|
||||
CINDEX_LINKAGE CXSourceRange clang_getDiagnosticRange(CXDiagnostic Diagnostic,
|
||||
unsigned Range);
|
||||
|
||||
/**
|
||||
* \brief Determine the number of fix-it hints associated with the
|
||||
|
|
|
@ -4,7 +4,6 @@ _clang_createIndex
|
|||
_clang_createTranslationUnit
|
||||
_clang_createTranslationUnitFromSourceFile
|
||||
_clang_disposeCodeCompleteResults
|
||||
_clang_disposeDiagnosticRanges
|
||||
_clang_disposeIndex
|
||||
_clang_disposeString
|
||||
_clang_disposeTokens
|
||||
|
@ -32,7 +31,8 @@ _clang_getDiagnosticFixItRemoval
|
|||
_clang_getDiagnosticFixItReplacement
|
||||
_clang_getDiagnosticLocation
|
||||
_clang_getDiagnosticNumFixIts
|
||||
_clang_getDiagnosticRanges
|
||||
_clang_getDiagnosticNumRanges
|
||||
_clang_getDiagnosticRange
|
||||
_clang_getDiagnosticSeverity
|
||||
_clang_getDiagnosticSpelling
|
||||
_clang_getFile
|
||||
|
|
|
@ -106,33 +106,23 @@ CXString clang_getDiagnosticSpelling(CXDiagnostic Diag) {
|
|||
return CIndexer::createCXString(Spelling.str(), true);
|
||||
}
|
||||
|
||||
void clang_getDiagnosticRanges(CXDiagnostic Diag,
|
||||
CXSourceRange **Ranges,
|
||||
unsigned *NumRanges) {
|
||||
if (Ranges)
|
||||
*Ranges = 0;
|
||||
if (NumRanges)
|
||||
*NumRanges = 0;
|
||||
|
||||
unsigned clang_getDiagnosticNumRanges(CXDiagnostic Diag) {
|
||||
CXStoredDiagnostic *StoredDiag = static_cast<CXStoredDiagnostic *>(Diag);
|
||||
if (!StoredDiag || !Ranges || !NumRanges ||
|
||||
!StoredDiag->Info.getNumRanges() ||
|
||||
StoredDiag->Info.getLocation().isInvalid())
|
||||
return;
|
||||
if (!StoredDiag || StoredDiag->Info.getLocation().isInvalid())
|
||||
return 0;
|
||||
|
||||
unsigned N = StoredDiag->Info.getNumRanges();
|
||||
*Ranges = (CXSourceRange *)malloc(sizeof(CXSourceRange) * N);
|
||||
*NumRanges = N;
|
||||
for (unsigned I = 0; I != N; ++I)
|
||||
(*Ranges)[I] = translateSourceRange(
|
||||
StoredDiag->Info.getLocation().getManager(),
|
||||
*StoredDiag->LangOptsPtr,
|
||||
StoredDiag->Info.getRange(I));
|
||||
return StoredDiag->Info.getNumRanges();
|
||||
}
|
||||
|
||||
void clang_disposeDiagnosticRanges(CXSourceRange *Ranges,
|
||||
unsigned NumRanges) {
|
||||
free(Ranges);
|
||||
CXSourceRange clang_getDiagnosticRange(CXDiagnostic Diag, unsigned Range) {
|
||||
CXStoredDiagnostic *StoredDiag = static_cast<CXStoredDiagnostic *>(Diag);
|
||||
if (!StoredDiag || Range >= StoredDiag->Info.getNumRanges() ||
|
||||
StoredDiag->Info.getLocation().isInvalid())
|
||||
return clang_getNullRange();
|
||||
|
||||
return translateSourceRange(StoredDiag->Info.getLocation().getManager(),
|
||||
*StoredDiag->LangOptsPtr,
|
||||
StoredDiag->Info.getRange(Range));
|
||||
}
|
||||
|
||||
unsigned clang_getDiagnosticNumFixIts(CXDiagnostic Diag) {
|
||||
|
|
|
@ -196,20 +196,20 @@ static void PrintDiagnosticCallback(CXDiagnostic Diagnostic,
|
|||
clang_getInstantiationLocation(clang_getDiagnosticLocation(Diagnostic),
|
||||
&file, &line, &column, 0);
|
||||
if (file) {
|
||||
CXSourceRange *ranges = 0;
|
||||
unsigned num_ranges;
|
||||
unsigned i;
|
||||
unsigned i, n;
|
||||
unsigned printed_any_ranges = 0;
|
||||
|
||||
fprintf(out, "%s:%d:%d:", clang_getFileName(file), line, column);
|
||||
|
||||
clang_getDiagnosticRanges(Diagnostic, &ranges, &num_ranges);
|
||||
for (i = 0; i != num_ranges; ++i) {
|
||||
n = clang_getDiagnosticNumRanges(Diagnostic);
|
||||
for (i = 0; i != n; ++i) {
|
||||
CXFile start_file, end_file;
|
||||
CXSourceRange range = clang_getDiagnosticRange(Diagnostic, i);
|
||||
|
||||
unsigned start_line, start_column, end_line, end_column;
|
||||
clang_getInstantiationLocation(clang_getRangeStart(ranges[i]),
|
||||
clang_getInstantiationLocation(clang_getRangeStart(range),
|
||||
&start_file, &start_line, &start_column,0);
|
||||
clang_getInstantiationLocation(clang_getRangeEnd(ranges[i]),
|
||||
clang_getInstantiationLocation(clang_getRangeEnd(range),
|
||||
&end_file, &end_line, &end_column, 0);
|
||||
|
||||
if (start_file != end_file || start_file != file)
|
||||
|
@ -219,7 +219,6 @@ static void PrintDiagnosticCallback(CXDiagnostic Diagnostic,
|
|||
end_column+1);
|
||||
printed_any_ranges = 1;
|
||||
}
|
||||
clang_disposeDiagnosticRanges(ranges, num_ranges);
|
||||
if (printed_any_ranges)
|
||||
fprintf(out, ":");
|
||||
|
||||
|
|
Loading…
Reference in New Issue