Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

manipulate a php codebase using haskell to transform the abstract-syntax-tree

branch: master

This branch is 0 commits ahead and 0 commits behind master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 src
Octocat-spinner-32 .gitignore
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README
Octocat-spinner-32 Setup.lhs
Octocat-spinner-32 g
Octocat-spinner-32 install
Octocat-spinner-32 lex-pass.cabal
README
Mailing list at: http://groups.google.com/group/lex-pass

lex-pass allows you to automate changes to a php codebase, by writing
abstract-syntax-tree transformers in haskell.  haskell is good because it is
well-suited for language manipulation and because it has good parsing libraries
that enable us to work with a nice abstract-syntax-tree.

to install
- ./install
depends on
- futil (git://github.com/facebook/futil.git)

to use
- run `lex-pass` to see options
- to see an example run, run `lex-pass example-glolbal` with a codebase in
  ~/www that uses some globals (e.g. "global $a;")
  - note a large codebase could takes tens of minutes the first run because no
    ast's are cached yet
  - you can ^C it early after it does 'Saving' on a few files to see how the
    changes work
- to write a new transformer
  - see src/Transf/ for examples
  - src/do-codegen (which is run by ./install) automatically detects new
    transformers in src/Transf/
- if you are using git you may want to use a separate repo instead of just a
  branch in an existing repo.  files have mtime updated by branch-switching,
  so there will be some unnecessary re-parsing.

notes for those hacking on lex-pass itself
- todo
  - php: b'' type string literals
  - maintain cached asts for codebase somewhere so ppl don't have to wait on
    their first lex-pass run?
  - better error on one-arg transf's if args wrong?
  - better way to specify args in transf doc?
  - make showing full transf list an option instead of default help?
  - we might actually get better perf with our own lexer, or at least not
    restarting php over and over again to do lexing.  but not worth looking
    into any time soon?
  - resolve xWs/xWS, xAst/xAST variable-capitalization indecision
  - future langs
    - css - easy and relevant, but maybe a css-preprocessor is better to use
    - js  - relevant
    - bash (we should probably just stop using..), c, python
Something went wrong with that request. Please try again.