Skip to content

Instantly share code, notes, and snippets.

@jbclements
Created April 11, 2012 17:04
Show Gist options
  • Save jbclements/2360573 to your computer and use it in GitHub Desktop.
Save jbclements/2360573 to your computer and use it in GitHub Desktop.
Hall
module Main where
import Control.Applicative ((<$>))
import Data.List (nub, sort)
import Data.Maybe (catMaybes, maybeToList)
import Language.JavaScript.Parser
import Safe
import System (getArgs)
main = do
js <- maybe (fail "Need a file!") parseFile =<< (headMay <$> getArgs)
--putStrLn . take 70000 . show $ js
mapM_ putStrLn . sort . nub $ vars False js
where
vars showID (NS n _) =
case n of
JSArguments b -> concatMap (concatMap (vars True)) b
JSBlock b -> vars False b
JSBreak b1 b2 -> concatMap (vars False) b1 ++ concatMap (vars False) b2
JSCase b1 b2 -> vars False b1 ++ vars False b2
JSCatch a b c -> vars False a ++ concatMap (vars False) b ++ vars False c
JSContinue a -> concatMap (vars False) a
JSDefault a -> vars False a
JSDoWhile a b c -> vars False a ++ vars False b ++ vars False c
JSElision a -> concatMap (vars False) a
JSEmpty a -> vars False a
JSExpression a -> concatMap (vars True) a
JSExpressionBinary _ b c -> concatMap (vars True) b ++ concatMap (vars True) c
JSExpressionParen a -> vars False a
JSExpressionPostfix _ a -> concatMap (vars False) a
JSFinally a -> vars False a
JSFor a b c d -> concatMap (vars False) a ++ concatMap (vars False) b ++ concatMap (vars False) c ++ vars False d
JSForIn a b c -> concatMap (vars False) a ++ vars False b ++ vars False c
JSForVar a b c d -> concatMap (vars False) a ++ concatMap (vars False) b ++ concatMap (vars False) c ++ vars False d
JSFunction a b c -> vars False a ++ concatMap (vars False) b ++ vars False c
JSFunctionBody a -> concatMap (vars True) a
JSFunctionExpression a _ c -> concatMap (vars False) a ++ vars False c
JSIf a b -> vars False a ++ vars False b
JSIfElse a b c -> vars False a ++ vars False b
JSLabelled a b -> vars False a ++ vars False b
JSMemberDot a b -> vars True (head a) ++ vars False b
JSMemberSquare a b -> concatMap (vars False) a ++ vars False b
JSObjectLiteral a -> concatMap (vars False) a
JSPropertyNameandValue _ b -> concatMap (vars True) b
JSReturn a -> concatMap (vars False) a
JSSourceElements a -> concatMap (vars False) a
JSSourceElementsTop a -> concatMap (vars False) a
JSStatementBlock a -> vars False a
JSStatementList a -> concatMap (vars False) a
JSSwitch a b -> vars False a ++ concatMap (vars False) b
JSThrow a -> vars False a
JSTry a b -> vars False a ++ concatMap (vars False) b
JSVarDecl a b -> vars True a ++ concatMap (vars False) b
JSVariables _ b -> concatMap (vars False) b
JSWhile a b -> vars False a ++ vars False b
JSWith a b -> vars False a ++ concatMap (vars False) b
JSIdentifier a -> if showID then [a] else []
otherwise -> []
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment