hjsmin 0.1.1 → 0.1.2
raw patch · 4 files changed
+28/−14 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- README.markdown +2/−0
- Text/Jasmine/Pretty.hs +16/−11
- hjsmin.cabal +1/−1
- runtests.hs +9/−2
README.markdown view
@@ -28,6 +28,8 @@ Changes ------- +0.1.2 - More general fix to the space after 'new' keyword, for issue #8 & #9+ 0.1.1 - Fixed problem with missing space after 'new' keyword, in issue #8. 0.1.0 - Major update to work with language-javascript 0.5.1. All changes should be internal.
Text/Jasmine/Pretty.hs view
@@ -50,14 +50,17 @@ -- Terminals rn (JSIdentifier s) = text s rn (JSDecimal i) = text i++rn (JSLiteral "new") = (text "new ") rn (JSLiteral l) = (text l)+ rn (JSHexInteger i) = (text $ show i) -- TODO: need to tweak this rn (JSStringLiteral s l) = empty <> (char s) <> (text l) <> (char s) rn (JSRegEx s) = (text s) -- Non Terminals rn (JSOperator x) = renderJS x-rn (JSExpression xs) = rJS $ fixNew xs+rn (JSExpression xs) = rJS xs --rn (JSSourceElements xs) = rJS (fixSourceElements $ map fixBlock xs)@@ -67,17 +70,17 @@ --rn (JSFunction s p xs) = (text "function") <+> (renderJS s) <> (text "(") <> (rJS p) <> (text ")") <> (renderJS xs)-rn (JSFunction _f s _lb p _rb x) = (text "function") <+> (renderJS s) <> (text "(") <> (rJS $ fixNew p) <> (text ")") <> (renderJS $ fixFnBlock x)+rn (JSFunction _f s _lb p _rb x) = (text "function") <+> (renderJS s) <> (text "(") <> (rJS p) <> (text ")") <> (renderJS $ fixFnBlock x) -- rn (JSFunctionBody xs) = (text "{") <> (rJS xs) <> (text "}") --rn (JSFunctionExpression [] p xs) = (text "function") <> (text "(") <> (rJS p) <> (text ")") <> (renderJS xs) --rn (JSFunctionExpression s p xs) = (text "function") <+> (rJS s) <> (text "(") <> (rJS p) <> (text ")") <> (renderJS xs)-rn (JSFunctionExpression _f [] _lb p _rb x) = (text "function") <> (text "(") <> (rJS $ fixNew p) <> (text ")") <> (renderJS $ fixFnBlock x)-rn (JSFunctionExpression _f s _lb p _rb x) = (text "function") <+> (rJS s) <> (text "(") <> (rJS $ fixNew p) <> (text ")") <> (renderJS $ fixFnBlock x)+rn (JSFunctionExpression _f [] _lb p _rb x) = (text "function") <> (text "(") <> (rJS p) <> (text ")") <> (renderJS $ fixFnBlock x)+rn (JSFunctionExpression _f s _lb p _rb x) = (text "function") <+> (rJS s) <> (text "(") <> (rJS p) <> (text ")") <> (renderJS $ fixFnBlock x) --rn (JSArguments xs ) = (text "(") <> (rJSList $ map fixLiterals xs) <> (text ")")-rn (JSArguments _lb xs _rb) = (text "(") <> (rJS $ fixLiterals $ fixNew xs) <> (text ")")+rn (JSArguments _lb xs _rb) = (text "(") <> (rJS $ fixLiterals xs) <> (text ")") rn (JSBlock lb xs rb) = (rJS lb) <> (rJS xs) <> (rJS rb) @@ -93,8 +96,8 @@ -rn (JSMemberDot xs _d y) = (rJS $ fixLiterals $ fixNew xs) <> (text ".") <> (renderJS y)-rn (JSMemberSquare xs _lb x _rb) = (rJS $ fixLiterals $ fixNew xs) <> (text "[") <> (renderJS x) <> (text "]")+rn (JSMemberDot xs _d y) = (rJS $ fixLiterals xs) <> (text ".") <> (renderJS y)+rn (JSMemberSquare xs _lb x _rb) = (rJS $ fixLiterals xs) <> (text "[") <> (renderJS x) <> (text "]") rn (JSUnary l _s ) = text l rn (JSArrayLiteral _lb xs _rb) = (text "[") <> (rJS xs) <> (text "]") @@ -130,7 +133,7 @@ rn (JSExpressionBinary o e1 _op e2) = (rJS e1) <> (text o) <> (rJS e2) rn (JSExpressionParen _lp e _rp) = (char '(') <> (renderJS e) <> (char ')') rn (JSExpressionPostfix o e _op) = (rJS e) <> (text o)-rn (JSExpressionTernary c _q v1 _c v2) = (rJS $ fixNew c) <> (char '?') <> (rJS $ fixNew v1) <> (char ':') <> (rJS $ fixNew v2)+rn (JSExpressionTernary c _q v1 _c v2) = (rJS c) <> (char '?') <> (rJS v1) <> (char ':') <> (rJS v2) rn (JSFinally _f b) = (text "finally") <> (renderJS $ fixFnBlock b) rn (JSFor _f _lb e1 _s1 e2 _s2 e3 _rb s) = (text "for") <> (char '(') <> (rJS e1) <> (char ';')@@ -147,7 +150,7 @@ rn (JSObjectLiteral _lb xs _rb) = (text "{") <> (rJS xs) <> (text "}") rn (JSPropertyAccessor s n _lb1 ps _rb1 b) = (renderJS s) <+> (renderJS n) <> (char '(') <> (rJS ps) <> (text ")") <> (renderJS $ fixFnBlock b)-rn (JSPropertyNameandValue n _c vs) = (renderJS n) <> (text ":") <> (rJS $ fixNew vs)+rn (JSPropertyNameandValue n _c vs) = (renderJS n) <> (text ":") <> (rJS vs) rn (JSReturn _r [] _as) = (text "return") rn (JSReturn _r [(NT (JSLiteral ";") _ _)] _as) = (text "return;++foobar+will_never_happen++") -- ++AZ++ get rid of this@@ -160,7 +163,7 @@ rn (JSTry _t e xs) = (text "try") <> (renderJS $ fixFnBlock e) <> (rJS xs) rn (JSVarDecl i []) = (renderJS i)-rn (JSVarDecl i xs) = (renderJS i) <> (rJS $ fixNew xs)+rn (JSVarDecl i xs) = (renderJS i) <> (rJS xs) rn (JSVariables kw xs _as) = (renderJS kw) <+> (rJS xs) @@ -209,16 +212,18 @@ where n = extractNode $ last xs +{- -- The "new" literal always need a space after it fixNew :: [JSNode] -> [JSNode] fixNew [] = [] fixNew ((NT (JSLiteral "new") p cs):xs) = (NT (JSLiteral "new ") p cs) : fixNew xs fixNew (x :xs) = x : fixNew xs+-} -- Fix semicolons in output of sourceelements and statementlist fixSourceElements :: [JSNode] -> [JSNode]-fixSourceElements xs = fixSemis $ myFix $ fixNew xs+fixSourceElements xs = fixSemis $ myFix xs myFix :: [JSNode] -> [JSNode] myFix [] = []
hjsmin.cabal view
@@ -1,5 +1,5 @@ name: hjsmin-version: 0.1.1+version: 0.1.2 license: BSD3 license-file: LICENSE author: Alan Zimmerman <alan.zimm@gmail.com>
runtests.hs view
@@ -41,6 +41,7 @@ , testCase "If3" caseIf3 , testCase "BootstrapDropdown" caseBootstrapDropdown , testCase "Issue8" caseIssue8+ , testCase "Issue9" caseIssue9 ] testSuiteMin :: Test@@ -68,6 +69,7 @@ , testCase "MinIf3" caseMinIf3 , testCase "MinBootstrapDropdown" caseMinBootstrapDropdown , testCase "MinIssue8" caseMinIssue8+ , testCase "MinIssue9" caseMinIssue9 ] @@ -305,7 +307,6 @@ "Right (JSSourceElementsTop [JSExpression [JSIdentifier \"clearMenus\",JSArguments []],JSExpression [JSExpressionBinary \"&&\" [JSUnary \"!\",JSIdentifier \"isActive\"] [JSMemberDot [JSIdentifier \"$parent\"] (JSIdentifier \"toggleClass\"),JSArguments [JSStringLiteral '\\'' \"open\"]]],JSLiteral \"\"])" @=? (showStrippedMaybe $ parseProgram srcBootstrapDropdown) caseMinBootstrapDropdown =- -- Note: jsmin preserves the \n, rather than the semi. A matter of taste, it is the same number of chars. testMinify "clearMenus();!isActive&&$parent.toggleClass('open')" srcBootstrapDropdown @@ -314,8 +315,14 @@ "Right (JSSourceElementsTop [JSExpression [JSExpressionParen (JSExpression [JSFunctionExpression [] [] (JSBlock ([JSExpression [JSMemberDot [JSLiteral \"new\",JSIdentifier \"nicEditor\",JSArguments [JSObjectLiteral [JSPropertyNameandValue (JSIdentifier \"fullPanel\") [JSLiteral \"true\"]]]] (JSIdentifier \"panelInstance\"),JSArguments [JSStringLiteral '\\'' \"h4\"]]]))]),JSArguments []],JSLiteral \";\",JSLiteral \"\"])" @=? (showStrippedMaybe $ parseProgram srcIssue8) caseMinIssue8 =- -- Note: jsmin preserves the \n, rather than the semi. A matter of taste, it is the same number of chars. testMinify "(function(){new nicEditor({fullPanel:true}).panelInstance('h4')})()" srcIssue8++srcIssue9 = "var x = [new friend(5)];"+caseIssue9 =+ "Right (JSSourceElementsTop [JSVariables JSLiteral \"var\" [JSVarDecl (JSIdentifier \"x\") [JSLiteral \"=\",JSArrayLiteral [JSLiteral \"new\",JSIdentifier \"friend\",JSArguments [JSDecimal \"5\"]]]],JSLiteral \"\"])"+ @=? (showStrippedMaybe $ parseProgram srcIssue9)+caseMinIssue9 =+ testMinify "var x=[new friend(5)]" srcIssue9 -- --------------------------------------------------------------------- -- utilities