wiki:ScriptableInterface

Version 8 (modified by manualwiki, 13 years ago) (diff)

--

Scriptable RefactorErl interface

ris is similar to ri, with the following basic ideas:

  • results are always returned via the function return value.
  • no mandatory standard output.
  • arguments very regular - semantic queries for almost everything.
  • you can also input a semantic query via atoms instead of strings to ease escaping.
  • operations are composable (i.e., continue one where another has left off) - queries and refactorings can go back and forth.
  • you can perform a series of batch refactorings in a single step by selecting multiple entities at once.

File manipulations

Error: Failed to load processor erlang
No macro or processor named 'erlang' found

It is possible to drop files from the database:

Error: Failed to load processor erlang
No macro or processor named 'erlang' found

Refactorings

Transformations are listed in refactoring functionalities. Here is the list of transformations that you can use via this interface:

Error: Failed to load processor erlang
No macro or processor named 'erlang' found
Error: Failed to load processor erlang
No macro or processor named 'erlang' found

Operators

The result of the queries can be combined with the following set operators:

  • intersect: The following example takes the intersection of the files included by the two modules.
Error: Failed to load processor erlang
No macro or processor named 'erlang' found
  • union: The union set operation. (Example: same as above, just substitute 'intersect' with 'union')
  • minus: The substraction set operation. (Example: same as above, just substitute 'intersect' with 'minus')
  • Sequence: Queries can be sequenced to continue a query from where another has left off. The execution works on arbitrarily long starting and continuation sequences (i.e., not just a single element). The following examples are correct, and can be used from ris:
Error: Failed to load processor erlang
No macro or processor named 'erlang' found

Sequences can be constructed not only between queries parts, but between a basic ris command and query parts, too. This example first adds the module from file 'mymodule.erl'. The add call returns the entities loaded. A semantic query aggregate of a list works by executing the first query (or in this case, specifying a starting entity), and then running the next query in the chain (in this case getting the name of files included by the add call).

Error: Failed to load processor erlang
No macro or processor named 'erlang' found

Textual display

Use ris:show/1 to stringify entities. ris:show/2 does the same while accepting additional options already known for ri:q/3. Use the respective ris:print/1 and ris:print/2 functions for screen and file output.

Error: Failed to load processor erlang
No macro or processor named 'erlang' found

The following gives the same result set, but written to the given file and annotated with line numbers. (Note that you could also manually write the output of ris:show/1 to a file.)

Error: Failed to load processor erlang
No macro or processor named 'erlang' found