/** * Strategies to handle the location of terms. * These strategies can only be used on terms that are annotated with their * position-info, i.e. are parsed with the option --preserve-positions */ module php/strategy/location strategies /** * Checks for position info annotations */ has-position-info = where(get-raw-area-in-file) /** * Several getter-methods */ get-start-line = get-specific-child(|0) get-end-line = get-specific-child(|2) get-start-column = get-specific-child(|1) get-end-column = get-specific-child(|3) get-length = get-specific-child(|5) get-offset = get-specific-child(|4) get-filename = get-raw-posinfo ; ?(_,x) ; !x /** * For internal purposes only */ get-raw-area-in-file = get-raw-posinfo ; ?(x,_) ; !x get-raw-posinfo = log(|Debug(), "Getting raw pos-info."); ?t{annos*} ; log(|Vomit(), "On term: " , <id>) ; <fetch-elem(?[pos-info,area-in-file(name,area)])> annos* ; log(|Vomit(), "Raw-area: " , <id>) ; !(area,name) ; log(|Vomit(), "Result: " , <id>) get-specific-child(|pos) = get-raw-area-in-file ; ?area#(chlds) ; <at-index(?res)> (pos,chlds) ; !res strategies /** * Formats a given string with information about the current term. * Within the string the following 'holes' are filled with the * appropiate information from the location of the term: * - [STARTLINE] - [STARTCOLUMN] * - [ENDLINE] - [ENDCOLUMN] * - [OFFSET] - [LENGTH] * - [FILENAME] * Note that the holes should be wrapped in '[' and ']'. * * @param msg String to be formatted * @type ATerm -> String */ format-location-string(|message) = ?term ; log(|Debug(), "Making message of ", term) ; !message ; log(|Debug(), "Using message: ", message) ; string-replace(|"[STARTLINE]" ,<get-start-line ; int-to-string> term) ; log(|Vomit(), "Startline.") ; string-replace(|"[ENDLINE]" ,<get-end-line ; int-to-string> term) ; log(|Vomit(), "Endline.") ; string-replace(|"[OFFSET]" ,<get-offset ; int-to-string> term) ; log(|Vomit(), "Offset.") ; string-replace(|"[STARTCOLUMN]",<get-start-column; int-to-string> term) ; log(|Vomit(), "Start column.") ; string-replace(|"[ENDCOLUMN]" ,<get-end-column ; int-to-string> term) ; log(|Vomit(), "End-column.") ; string-replace(|"[LENGTH]" ,<get-length ; int-to-string> term) ; log(|Vomit(), "Get-length.") ; string-replace(|"[FILENAME]" ,<get-filename > term) ; log(|Vomit(), "Filename, done.")