1 /* Determining the results of applying fix-it hints. 2 Copyright (C) 2016-2020 Free Software Foundation, Inc. 3 4 This file is part of GCC. 5 6 GCC is free software; you can redistribute it and/or modify it under 7 the terms of the GNU General Public License as published by the Free 8 Software Foundation; either version 3, or (at your option) any later 9 version. 10 11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 12 WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GCC; see the file COPYING3. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20 #ifndef GCC_EDIT_CONTEXT_H 21 #define GCC_EDIT_CONTEXT_H 22 23 #include "typed-splay-tree.h" 24 25 class edit_context; 26 class edited_file; 27 28 /* A set of changes to the source code. 29 30 The changes are "atomic" - if any changes can't be applied, 31 none of them can be (tracked by the m_valid flag). 32 Similarly, attempts to add the changes from a rich_location flagged 33 as containing invalid changes mean that the whole of the edit_context 34 is flagged as invalid. 35 36 A complication here is that fix-its are expressed relative to coordinates 37 in the files when they were parsed, before any changes have been made, and 38 so if there's more that one fix-it to be applied, we have to adjust 39 later fix-its to allow for the changes made by earlier ones. This 40 is done by the various "get_effective_column" methods. */ 41 42 class edit_context 43 { 44 public: 45 edit_context (); 46 valid_p()47 bool valid_p () const { return m_valid; } 48 49 void add_fixits (rich_location *richloc); 50 51 char *get_content (const char *filename); 52 53 int get_effective_column (const char *filename, int line, int column); 54 55 char *generate_diff (bool show_filenames); 56 void print_diff (pretty_printer *pp, bool show_filenames); 57 58 private: 59 bool apply_fixit (const fixit_hint *hint); 60 edited_file *get_file (const char *filename); 61 edited_file &get_or_insert_file (const char *filename); 62 63 bool m_valid; 64 typed_splay_tree<const char *, edited_file *> m_files; 65 }; 66 67 #endif /* GCC_EDIT_CONTEXT_H. */ 68