This file will hold a very high level overview of the brm
architecture. More detailed information can be gained by reading the
source, and documentation in each package.

Bike Component Interface
------------------------

import bike

ctx = bike.init()
ctx.renameMethod("a.b.foo","bah")
ctx = ctx.load("baz.py")
ctx.renameClass("baz.MyClass","YourClass")
ctx.save()
ctx.undo()


Brief Overview
--------------

File System Dependency:

Bicyclerepair man operates off of the file system. Modules are loaded
from the file system, and saved back after a refactoring. Integration
with IDEs currently relies on the IDE ensuring that the files on disk
are up-to-date before performing a query or refactoring, and is
responsible for reloading the modified files after the operation.

Internals:


*** OUT OF DATE!!! ****

A tree of python Source objects is loaded into bicyclerepairman by the
'parsing' module. A custom parser is run over each source objects
contents, and a construction of a simple abstract-syntax-tree is
created, containing functions and classes.

Modules in the 'query' package do queries on the source tree, using the
simple ast, sourcecode inspection, and the python compiler package.

Modules in the 'transform' package operate on the source nodes,
ensuring integrity and consistency in the updates.

Modules in the 'refactor' package use the 'query' and 'transform'
packages to perform refactorings.

The BikeFacade class wraps all of this functionality and provides the
component interface illustrated above.


Terms:
------

AST - Abstract Syntax Tree. A tree of nodes corresponding to logical python programming blocks. E.g. Class, Function, Import, Pass ..etc.. etc..

Parse Tree: a tree of grammatical nodes generated by the parser.

Scanner Tokens - tokens corresponding to 'words' in the source code. E.g. Name('comment') 

