[cfe-commits] r96685 - in /cfe/trunk: include/clang-c/Index.h tools/CIndex/CIndex.exports tools/CIndex/CIndexDiagnostic.cpp tools/c-index-test/c-index-test.c
Daniel Dunbar
daniel at zuster.org
Sat Feb 20 02:21:22 PST 2010
On Fri, Feb 19, 2010 at 10:16 AM, Douglas Gregor <dgregor at apple.com> wrote:
> Author: dgregor
> Date: Fri Feb 19 12:16:06 2010
> New Revision: 96685
>
> URL: http://llvm.org/viewvc/llvm-project?rev=96685&view=rev
> Log:
> Simplify the CIndex fix-it API, now that we have half-open CXSourceRanges.
Nice, thanks Doug!
- Daniel
> Modified:
> cfe/trunk/include/clang-c/Index.h
> cfe/trunk/tools/CIndex/CIndex.exports
> cfe/trunk/tools/CIndex/CIndexDiagnostic.cpp
> cfe/trunk/tools/c-index-test/c-index-test.c
>
> Modified: cfe/trunk/include/clang-c/Index.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=96685&r1=96684&r2=96685&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang-c/Index.h (original)
> +++ cfe/trunk/include/clang-c/Index.h Fri Feb 19 12:16:06 2010
> @@ -390,28 +390,6 @@
> };
>
> /**
> - * \brief Describes the kind of fix-it hint expressed within a
> - * diagnostic.
> - */
> -enum CXFixItKind {
> - /**
> - * \brief A fix-it hint that inserts code at a particular position.
> - */
> - CXFixIt_Insertion = 0,
> -
> - /**
> - * \brief A fix-it hint that removes code within a range.
> - */
> - CXFixIt_Removal = 1,
> -
> - /**
> - * \brief A fix-it hint that replaces the code within a range with another
> - * string.
> - */
> - CXFixIt_Replacement = 2
> -};
> -
> -/**
> * \brief A single diagnostic, containing the diagnostic's severity,
> * location, text, source ranges, and fix-it hints.
> */
> @@ -561,69 +539,33 @@
> CINDEX_LINKAGE unsigned clang_getDiagnosticNumFixIts(CXDiagnostic Diagnostic);
>
> /**
> - * \brief Retrieve the kind of the given fix-it.
> - *
> - * \param Diagnostic the diagnostic whose fix-its are being queried.
> - *
> - * \param FixIt the zero-based index of the fix-it to query.
> - */
> -CINDEX_LINKAGE enum CXFixItKind
> -clang_getDiagnosticFixItKind(CXDiagnostic Diagnostic, unsigned FixIt);
> -
> -/**
> - * \brief Retrieve the insertion information for an insertion fix-it.
> - *
> - * For a fix-it that describes an insertion into a text buffer,
> - * retrieve the source location where the text should be inserted and
> - * the text to be inserted.
> - *
> - * \param Diagnostic the diagnostic whose fix-its are being queried.
> - *
> - * \param FixIt the zero-based index of the insertion fix-it.
> - *
> - * \param Location will be set to the location where text should be
> - * inserted.
> - *
> - * \returns the text string to insert at the given location.
> - */
> -CINDEX_LINKAGE CXString
> -clang_getDiagnosticFixItInsertion(CXDiagnostic Diagnostic, unsigned FixIt,
> - CXSourceLocation *Location);
> -
> -/**
> - * \brief Retrieve the removal information for a removal fix-it.
> - *
> - * For a fix-it that describes a removal from a text buffer, retrieve
> - * the source range that should be removed.
> - *
> - * \param Diagnostic the diagnostic whose fix-its are being queried.
> - *
> - * \param FixIt the zero-based index of the removal fix-it.
> - *
> - * \returns a source range describing the text that should be removed
> - * from the buffer.
> - */
> -CINDEX_LINKAGE CXSourceRange
> -clang_getDiagnosticFixItRemoval(CXDiagnostic Diagnostic, unsigned FixIt);
> -
> -/**
> - * \brief Retrieve the replacement information for an replacement fix-it.
> - *
> - * For a fix-it that describes replacement of text in the text buffer
> - * with alternative text.
> + * \brief Retrieve the replacement information for a given fix-it.
> *
> - * \param Diagnostic the diagnostic whose fix-its are being queried.
> - *
> - * \param FixIt the zero-based index of the replacement fix-it.
> - *
> - * \param Range will be set to the source range whose text should be
> - * replaced with the returned text.
> - *
> - * \returns the text string to use as replacement text.
> - */
> -CINDEX_LINKAGE CXString
> -clang_getDiagnosticFixItReplacement(CXDiagnostic Diagnostic, unsigned FixIt,
> - CXSourceRange *Range);
> + * Fix-its are described in terms of a source range whose contents
> + * should be replaced by a string. This approach generalizes over
> + * three kinds of operations: removal of source code (the range covers
> + * the code to be removed and the replacement string is empty),
> + * replacement of source code (the range covers the code to be
> + * replaced and the replacement string provides the new code), and
> + * insertion (both the start and end of the range point at the
> + * insertion location, and the replacement string provides the text to
> + * insert).
> + *
> + * \param Diagnostic The diagnostic whose fix-its are being queried.
> + *
> + * \param FixIt The zero-based index of the fix-it.
> + *
> + * \param ReplacementRange The source range whose contents will be
> + * replaced with the returned replacement string. Note that source
> + * ranges are half-open ranges [a, b), so the source code should be
> + * replaced from a and up to (but not including) b.
> + *
> + * \returns A string containing text that should be replace the source
> + * code indicated by the \c ReplacementRange.
> + */
> +CINDEX_LINKAGE CXString clang_getDiagnosticFixIt(CXDiagnostic Diagnostic,
> + unsigned FixIt,
> + CXSourceRange *ReplacementRange);
>
> /**
> * @}
>
> Modified: cfe/trunk/tools/CIndex/CIndex.exports
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.exports?rev=96685&r1=96684&r2=96685&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/CIndex/CIndex.exports (original)
> +++ cfe/trunk/tools/CIndex/CIndex.exports Fri Feb 19 12:16:06 2010
> @@ -32,10 +32,7 @@
> _clang_getCursorUSR
> _clang_getDefinitionSpellingAndExtent
> _clang_getDiagnostic
> -_clang_getDiagnosticFixItInsertion
> -_clang_getDiagnosticFixItKind
> -_clang_getDiagnosticFixItRemoval
> -_clang_getDiagnosticFixItReplacement
> +_clang_getDiagnosticFixIt
> _clang_getDiagnosticLocation
> _clang_getDiagnosticNumFixIts
> _clang_getDiagnosticNumRanges
>
> Modified: cfe/trunk/tools/CIndex/CIndexDiagnostic.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndexDiagnostic.cpp?rev=96685&r1=96684&r2=96685&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/CIndex/CIndexDiagnostic.cpp (original)
> +++ cfe/trunk/tools/CIndex/CIndexDiagnostic.cpp Fri Feb 19 12:16:06 2010
> @@ -184,74 +184,42 @@
> return StoredDiag->Diag.fixit_size();
> }
>
> -enum CXFixItKind clang_getDiagnosticFixItKind(CXDiagnostic Diag,
> - unsigned FixIt) {
> - CXStoredDiagnostic *StoredDiag = static_cast<CXStoredDiagnostic *>(Diag);
> - if (!StoredDiag || FixIt >= StoredDiag->Diag.fixit_size())
> - return CXFixIt_Insertion;
> -
> - const CodeModificationHint &Hint = StoredDiag->Diag.fixit_begin()[FixIt];
> - if (Hint.RemoveRange.isInvalid())
> - return CXFixIt_Insertion;
> - if (Hint.InsertionLoc.isInvalid())
> - return CXFixIt_Removal;
> -
> - return CXFixIt_Replacement;
> -}
> -
> -CXString clang_getDiagnosticFixItInsertion(CXDiagnostic Diag,
> - unsigned FixIt,
> - CXSourceLocation *Location) {
> - if (Location)
> - *Location = clang_getNullLocation();
> -
> - CXStoredDiagnostic *StoredDiag = static_cast<CXStoredDiagnostic *>(Diag);
> - if (!StoredDiag || FixIt >= StoredDiag->Diag.fixit_size())
> - return createCXString("");
> -
> - const CodeModificationHint &Hint = StoredDiag->Diag.fixit_begin()[FixIt];
> -
> - if (Location && StoredDiag->Diag.getLocation().isValid())
> - *Location = translateSourceLocation(
> - StoredDiag->Diag.getLocation().getManager(),
> - StoredDiag->LangOpts,
> - Hint.InsertionLoc);
> - return createCXString(Hint.CodeToInsert);
> -}
> -
> -CXSourceRange clang_getDiagnosticFixItRemoval(CXDiagnostic Diag,
> - unsigned FixIt) {
> - CXStoredDiagnostic *StoredDiag = static_cast<CXStoredDiagnostic *>(Diag);
> - if (!StoredDiag || FixIt >= StoredDiag->Diag.fixit_size() ||
> - StoredDiag->Diag.getLocation().isInvalid())
> - return clang_getNullRange();
> -
> - const CodeModificationHint &Hint = StoredDiag->Diag.fixit_begin()[FixIt];
> - return translateSourceRange(StoredDiag->Diag.getLocation().getManager(),
> - StoredDiag->LangOpts,
> - Hint.RemoveRange);
> -}
> -
> -CXString clang_getDiagnosticFixItReplacement(CXDiagnostic Diag,
> - unsigned FixIt,
> - CXSourceRange *Range) {
> - if (Range)
> - *Range = clang_getNullRange();
> -
> - CXStoredDiagnostic *StoredDiag = static_cast<CXStoredDiagnostic *>(Diag);
> +CXString clang_getDiagnosticFixIt(CXDiagnostic Diagnostic, unsigned FixIt,
> + CXSourceRange *ReplacementRange) {
> + CXStoredDiagnostic *StoredDiag
> + = static_cast<CXStoredDiagnostic *>(Diagnostic);
> if (!StoredDiag || FixIt >= StoredDiag->Diag.fixit_size() ||
> StoredDiag->Diag.getLocation().isInvalid()) {
> - if (Range)
> - *Range = clang_getNullRange();
> + if (ReplacementRange)
> + *ReplacementRange = clang_getNullRange();
>
> return createCXString("");
> }
>
> const CodeModificationHint &Hint = StoredDiag->Diag.fixit_begin()[FixIt];
> - if (Range)
> - *Range = translateSourceRange(StoredDiag->Diag.getLocation().getManager(),
> - StoredDiag->LangOpts,
> - Hint.RemoveRange);
> + if (ReplacementRange) {
> + if (Hint.RemoveRange.isInvalid()) {
> + // Create an empty range that refers to a single source
> + // location (which is the insertion point).
> + CXSourceRange Range = {
> + { (void *)&StoredDiag->Diag.getLocation().getManager(),
> + (void *)&StoredDiag->LangOpts },
> + Hint.InsertionLoc.getRawEncoding(),
> + Hint.InsertionLoc.getRawEncoding()
> + };
> +
> + *ReplacementRange = Range;
> + } else {
> + // Create a range that covers the entire replacement (or
> + // removal) range, adjusting the end of the range to point to
> + // the end of the token.
> + *ReplacementRange
> + = translateSourceRange(StoredDiag->Diag.getLocation().getManager(),
> + StoredDiag->LangOpts,
> + Hint.RemoveRange);
> + }
> + }
> +
> return createCXString(Hint.CodeToInsert);
> }
>
>
> Modified: cfe/trunk/tools/c-index-test/c-index-test.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=96685&r1=96684&r2=96685&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/c-index-test/c-index-test.c (original)
> +++ cfe/trunk/tools/c-index-test/c-index-test.c Fri Feb 19 12:16:06 2010
> @@ -198,7 +198,6 @@
> void PrintDiagnostic(CXDiagnostic Diagnostic) {
> FILE *out = stderr;
> CXFile file;
> - CXString text;
> unsigned display_opts = CXDiagnostic_DisplaySourceLocation
> | CXDiagnostic_DisplayColumn | CXDiagnostic_DisplaySourceRanges;
> unsigned i, num_fixits;
> @@ -214,58 +213,37 @@
>
> num_fixits = clang_getDiagnosticNumFixIts(Diagnostic);
> for (i = 0; i != num_fixits; ++i) {
> - switch (clang_getDiagnosticFixItKind(Diagnostic, i)) {
> - case CXFixIt_Insertion: {
> - CXSourceLocation insertion_loc;
> - CXFile insertion_file;
> - unsigned insertion_line, insertion_column;
> - text = clang_getDiagnosticFixItInsertion(Diagnostic, i, &insertion_loc);
> - clang_getInstantiationLocation(insertion_loc, &insertion_file,
> - &insertion_line, &insertion_column, 0);
> - if (insertion_file == file)
> + CXSourceRange range;
> + CXString insertion_text = clang_getDiagnosticFixIt(Diagnostic, i, &range);
> + CXSourceLocation start = clang_getRangeStart(range);
> + CXSourceLocation end = clang_getRangeEnd(range);
> + unsigned start_line, start_column, end_line, end_column;
> + CXFile start_file, end_file;
> + clang_getInstantiationLocation(start, &start_file, &start_line,
> + &start_column, 0);
> + clang_getInstantiationLocation(end, &end_file, &end_line, &end_column, 0);
> + if (clang_equalLocations(start, end)) {
> + /* Insertion. */
> + if (start_file == file)
> fprintf(out, "FIX-IT: Insert \"%s\" at %d:%d\n",
> - clang_getCString(text), insertion_line, insertion_column);
> - clang_disposeString(text);
> - break;
> - }
> -
> - case CXFixIt_Removal: {
> - CXFile start_file, end_file;
> - unsigned start_line, start_column, end_line, end_column;
> - CXSourceRange remove_range
> - = clang_getDiagnosticFixItRemoval(Diagnostic, i);
> - clang_getInstantiationLocation(clang_getRangeStart(remove_range),
> - &start_file, &start_line, &start_column,
> - 0);
> - clang_getInstantiationLocation(clang_getRangeEnd(remove_range),
> - &end_file, &end_line, &end_column, 0);
> + clang_getCString(insertion_text), start_line, start_column);
> + } else if (strcmp(clang_getCString(insertion_text), "") == 0) {
> + /* Removal. */
> if (start_file == file && end_file == file) {
> fprintf(out, "FIX-IT: Remove ");
> PrintExtent(out, start_line, start_column, end_line, end_column);
> fprintf(out, "\n");
> }
> - break;
> - }
> -
> - case CXFixIt_Replacement: {
> - CXFile start_file, end_file;
> - unsigned start_line, start_column, end_line, end_column;
> - CXSourceRange remove_range;
> - text = clang_getDiagnosticFixItReplacement(Diagnostic, i,&remove_range);
> - clang_getInstantiationLocation(clang_getRangeStart(remove_range),
> - &start_file, &start_line, &start_column,
> - 0);
> - clang_getInstantiationLocation(clang_getRangeEnd(remove_range),
> - &end_file, &end_line, &end_column, 0);
> + } else {
> + /* Replacement. */
> if (start_file == end_file) {
> fprintf(out, "FIX-IT: Replace ");
> PrintExtent(out, start_line, start_column, end_line, end_column);
> - fprintf(out, " with \"%s\"\n", clang_getCString(text));
> + fprintf(out, " with \"%s\"\n", clang_getCString(insertion_text));
> }
> - clang_disposeString(text);
> break;
> }
> - }
> + clang_disposeString(insertion_text);
> }
> }
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list