The graph command produces the top down reference tree for the program, but in complex programs, finding the parents of a block could be quite difficult and searching the entire graph is not exactly ideal.
Providing a reversed graph with block targetting would allow for a user to quickly identify all the instances where a given block is used, which is particularly useful for reverse engineering as well as providing a way to automatically annotate code blocks with in-document linking to all parents that use the block, so users can navigate up and down the codebase within the document itself.
As an example, for a markdown file containing:
Output a set of words
lang: zig esc: [[]] tag: #just return a string
---------------------------------
pub fn test() []u8 {
const str : []u8 = "[[words:from('text')]]";
return str;
}
These are the words to be said
lang: text esc: none tag: #words
--------------------------------
arbitrary text
The query of zangle graph --reverse --target=#words example.md might output something along the lines of (as a simple single-target list output example):
[ "#words", [.{.tag="#just return a string", .line=2, .character=25}]]
This could then be used by other tools or in the cleanup command to annotate blocks with references, to for example output the following:
Output a set of words
#just return a string
pub fn test() []u8 {
const str : []u8 = "[[words:from('text')]]";
return str;
}
Code block referenced in: example.md, line 2, column 5
These are the words to be said
#words
Code block referenced in: #just return a string, line 2, column 25
The flexibility of this kind of reference extraction would also be quite useful for debugging and potential integration with document editors, such as vim plugins.
The graph command produces the top down reference tree for the program, but in complex programs, finding the parents of a block could be quite difficult and searching the entire graph is not exactly ideal.
Providing a reversed graph with block targetting would allow for a user to quickly identify all the instances where a given block is used, which is particularly useful for reverse engineering as well as providing a way to automatically annotate code blocks with in-document linking to all parents that use the block, so users can navigate up and down the codebase within the document itself.
As an example, for a markdown file containing:
The query of
zangle graph --reverse --target=#words example.mdmight output something along the lines of (as a simple single-target list output example):This could then be used by other tools or in the cleanup command to annotate blocks with references, to for example output the following:
Output a set of words
#just return a string
These are the words to be said
#words
The flexibility of this kind of reference extraction would also be quite useful for debugging and potential integration with document editors, such as vim plugins.