diff --git a/lexers/testdata/fennel.expected b/lexers/testdata/fennel.expected index 1c31bb4f8..3c16fd2bb 100644 --- a/lexers/testdata/fennel.expected +++ b/lexers/testdata/fennel.expected @@ -1,572 +1,572 @@ -[ - {"type":"CommentSingle","value":";; An example of some possible linters using Fennel's --plugin option."}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"CommentSingle","value":";; The first two linters here can only function on static module"}, - {"type":"TextWhitespace","value":"\n"}, - {"type":"CommentSingle","value":";; use. For instance, this code can be checked because they use static"}, - {"type":"TextWhitespace","value":"\n"}, - {"type":"CommentSingle","value":";; field access on a local directly bound to a require call:"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"CommentSingle","value":";; (local m (require :mymodule))"}, - {"type":"TextWhitespace","value":"\n"}, - {"type":"CommentSingle","value":";; (print m.field) ; fails if mymodule lacks a :field field"}, - {"type":"TextWhitespace","value":"\n"}, - {"type":"CommentSingle","value":";; (print (m.function 1 2 3)) ; fails unless mymodule.function takes 3 args"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"CommentSingle","value":";; However, these cannot:"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"CommentSingle","value":";; (local m (do (require :mymodule)) ; m is not directly bound"}, - {"type":"TextWhitespace","value":"\n"}, - {"type":"CommentSingle","value":";; (print (. m field)) ; not a static field reference"}, - {"type":"TextWhitespace","value":"\n"}, - {"type":"CommentSingle","value":";; (let [f m.function]"}, - {"type":"TextWhitespace","value":"\n"}, - {"type":"CommentSingle","value":";; (print (f 1 2 3)) ; intermediate local, not a static field call on m"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"CommentSingle","value":";; Still, pretty neat, huh?"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"CommentSingle","value":";; This file is provided as an example and is not part of Fennel's public API."}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"Punctuation","value":"("}, - {"type":"KeywordDeclaration","value":"fn "}, - {"type":"NameVariable","value":"save-require-meta"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"from"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"to"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"scope"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralString","value":"\"When destructuring, save module name if local is bound to a `require' call.\nDoesn't do any linting on its own; just saves the data for other linters.\""}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"when "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"and "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"sym?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"to"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"not "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"multi-sym?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"to"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"list?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"from"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"sym?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameVariable","value":"from"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralNumberInteger","value":"1"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"= "}, - {"type":"LiteralStringSymbol","value":":require"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"tostring "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameVariable","value":"from"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralNumberInteger","value":"1"}, - {"type":"Punctuation","value":")))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"= "}, - {"type":"LiteralStringSymbol","value":":string"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"type "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameVariable","value":"from"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralNumberInteger","value":"2"}, - {"type":"Punctuation","value":"))))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"let "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"meta"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameVariable","value":"scope.symmeta"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"tostring "}, - {"type":"NameVariable","value":"to"}, - {"type":"Punctuation","value":"))]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"set "}, - {"type":"NameVariable","value":"meta.required"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"tostring "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameVariable","value":"from"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralNumberInteger","value":"2"}, - {"type":"Punctuation","value":"))))))"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"Punctuation","value":"("}, - {"type":"KeywordDeclaration","value":"fn "}, - {"type":"NameVariable","value":"check-module-fields"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"symbol"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"scope"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralString","value":"\"When referring to a field in a local that's a module, make sure it exists.\""}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"let "}, - {"type":"Punctuation","value":"[["}, - {"type":"NameVariable","value":"module-local"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"field"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"multi-sym?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"symbol"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"[])"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"-?\u003e "}, - {"type":"NameVariable","value":"scope.symmeta"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"tostring "}, - {"type":"NameVariable","value":"module-local"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"LiteralStringSymbol","value":":required"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"NameBuiltin","value":"module "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"and "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"require "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"Punctuation","value":"))]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"assert-compile"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"= "}, - {"type":"NameBuiltin","value":"module "}, - {"type":"NameVariable","value":"nil"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"not= "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameBuiltin","value":"module "}, - {"type":"NameVariable","value":"field"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"nil"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"string.format "}, - {"type":"LiteralString","value":"\"Missing field %s in module %s\""}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"NameVariable","value":"field"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":?"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":?"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"symbol"}, - {"type":"Punctuation","value":")))"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"Punctuation","value":"("}, - {"type":"KeywordDeclaration","value":"fn "}, - {"type":"NameVariable","value":"arity-check?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"module"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"-?\u003e "}, - {"type":"NameBuiltin","value":"module getmetatable "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"LiteralStringSymbol","value":":arity-check?"}, - {"type":"Punctuation","value":")))"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"Punctuation","value":"("}, - {"type":"KeywordDeclaration","value":"fn "}, - {"type":"NameVariable","value":"arity-check-call"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"[["}, - {"type":"NameVariable","value":"f"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Operator","value":"\u0026"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"args"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"scope"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralString","value":"\"Perform static arity checks on static function calls in a module.\""}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"let "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"arity"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Operator","value":"#"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"args"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"NameVariable","value":"last-arg"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameVariable","value":"args"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"arity"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"f-local"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"field"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"multi-sym?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"f"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"[])"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"-?\u003e "}, - {"type":"NameVariable","value":"scope.symmeta"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"tostring "}, - {"type":"NameVariable","value":"f-local"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"LiteralStringSymbol","value":":required"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"NameBuiltin","value":"module "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"and "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"require "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"Punctuation","value":"))]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"when "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"and "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"arity-check?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"module"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"_G.debug"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"_G.debug.getinfo"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"not "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"varg?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"last-arg"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"not "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"list?"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"last-arg"}, - {"type":"Punctuation","value":")))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"assert-compile"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"= "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"type "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameBuiltin","value":"module "}, - {"type":"NameVariable","value":"field"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":function"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"string.format "}, - {"type":"LiteralString","value":"\"Missing function %s in module %s\""}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"NameVariable","value":"field"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":?"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"module-name"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"f"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"match "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"_G.debug.getinfo"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameBuiltin","value":"module "}, - {"type":"NameVariable","value":"field"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"{"}, - {"type":"Keyword","value":": "}, - {"type":"NameVariable","value":"nparams"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":what"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralString","value":"\"Lua\""}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":isvararg"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"true"}, - {"type":"Punctuation","value":"}"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"assert-compile"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"\u003c= "}, - {"type":"NameVariable","value":"nparams"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Operator","value":"#"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"args"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":": "}, - {"type":"LiteralString","value":"\"Called %s.%s with %s arguments, expected %s+\""}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralStringSymbol","value":":format"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"f-local"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"field"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"arity"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"nparams"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"f"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"{"}, - {"type":"Keyword","value":": "}, - {"type":"NameVariable","value":"nparams"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":what"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralString","value":"\"Lua\""}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":isvararg"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"false"}, - {"type":"Punctuation","value":"}"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"assert-compile"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"= "}, - {"type":"NameVariable","value":"nparams"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Operator","value":"#"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"args"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":": "}, - {"type":"LiteralString","value":"\"Called %s.%s with %s arguments, expected %s\""}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralStringSymbol","value":":format"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"f-local"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"field"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"arity"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"nparams"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"f"}, - {"type":"Punctuation","value":")))))"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"Punctuation","value":"("}, - {"type":"KeywordDeclaration","value":"fn "}, - {"type":"NameVariable","value":"check-unused"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"ast"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"scope"}, - {"type":"Punctuation","value":"]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"each "}, - {"type":"Punctuation","value":"["}, - {"type":"NameVariable","value":"symname"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"pairs "}, - {"type":"NameVariable","value":"scope.symmeta"}, - {"type":"Punctuation","value":")]"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"assert-compile"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":". "}, - {"type":"NameVariable","value":"scope.symmeta"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"symname"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":used"}, - {"type":"Punctuation","value":")"}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"NameFunction","value":"symname"}, - {"type":"LiteralStringSymbol","value":":find"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralString","value":"\"^_\""}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"Punctuation","value":"("}, - {"type":"NameBuiltin","value":"string.format "}, - {"type":"LiteralString","value":"\"unused local %s\""}, - {"type":"TextWhitespace","value":" "}, - {"type":"Punctuation","value":"("}, - {"type":"Keyword","value":"or "}, - {"type":"NameVariable","value":"symname"}, - {"type":"TextWhitespace","value":" "}, - {"type":"LiteralStringSymbol","value":":?"}, - {"type":"Punctuation","value":"))"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"ast"}, - {"type":"Punctuation","value":")))"}, - {"type":"TextWhitespace","value":"\n\n"}, - {"type":"Punctuation","value":"{"}, - {"type":"LiteralStringSymbol","value":":destructure"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"save-require-meta"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralStringSymbol","value":":symbol-to-expression"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"check-module-fields"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralStringSymbol","value":":call"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"arity-check-call"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"CommentSingle","value":";; Note that this will only check unused args inside functions and let blocks,"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"CommentSingle","value":";; not top-level locals of a chunk."}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralStringSymbol","value":":fn"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"check-unused"}, - {"type":"TextWhitespace","value":"\n "}, - {"type":"LiteralStringSymbol","value":":do"}, - {"type":"TextWhitespace","value":" "}, - {"type":"NameVariable","value":"check-unused"}, - {"type":"Punctuation","value":"}"}, - {"type":"TextWhitespace","value":"\n"} -] +[ + {"type":"CommentSingle","value":";; An example of some possible linters using Fennel's --plugin option."}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"CommentSingle","value":";; The first two linters here can only function on static module"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"CommentSingle","value":";; use. For instance, this code can be checked because they use static"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"CommentSingle","value":";; field access on a local directly bound to a require call:"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"CommentSingle","value":";; (local m (require :mymodule))"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"CommentSingle","value":";; (print m.field) ; fails if mymodule lacks a :field field"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"CommentSingle","value":";; (print (m.function 1 2 3)) ; fails unless mymodule.function takes 3 args"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"CommentSingle","value":";; However, these cannot:"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"CommentSingle","value":";; (local m (do (require :mymodule)) ; m is not directly bound"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"CommentSingle","value":";; (print (. m field)) ; not a static field reference"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"CommentSingle","value":";; (let [f m.function]"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"CommentSingle","value":";; (print (f 1 2 3)) ; intermediate local, not a static field call on m"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"CommentSingle","value":";; Still, pretty neat, huh?"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"CommentSingle","value":";; This file is provided as an example and is not part of Fennel's public API."}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Punctuation","value":"("}, + {"type":"KeywordDeclaration","value":"fn "}, + {"type":"NameVariable","value":"save-require-meta"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"from"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"to"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"scope"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralString","value":"\"When destructuring, save module name if local is bound to a `require' call.\nDoesn't do any linting on its own; just saves the data for other linters.\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"when "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"and "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"sym?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"to"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"not "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"multi-sym?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"to"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"list?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"from"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"sym?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameVariable","value":"from"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralNumberInteger","value":"1"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"= "}, + {"type":"LiteralStringSymbol","value":":require"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"tostring "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameVariable","value":"from"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralNumberInteger","value":"1"}, + {"type":"Punctuation","value":")))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"= "}, + {"type":"LiteralStringSymbol","value":":string"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"type "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameVariable","value":"from"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralNumberInteger","value":"2"}, + {"type":"Punctuation","value":"))))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"let "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"meta"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameVariable","value":"scope.symmeta"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"tostring "}, + {"type":"NameVariable","value":"to"}, + {"type":"Punctuation","value":"))]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"set "}, + {"type":"NameVariable","value":"meta.required"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"tostring "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameVariable","value":"from"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralNumberInteger","value":"2"}, + {"type":"Punctuation","value":"))))))"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Punctuation","value":"("}, + {"type":"KeywordDeclaration","value":"fn "}, + {"type":"NameVariable","value":"check-module-fields"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"symbol"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"scope"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralString","value":"\"When referring to a field in a local that's a module, make sure it exists.\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"let "}, + {"type":"Punctuation","value":"[["}, + {"type":"NameVariable","value":"module-local"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"field"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"multi-sym?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"symbol"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"[])"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"-?\u003e "}, + {"type":"NameVariable","value":"scope.symmeta"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"tostring "}, + {"type":"NameVariable","value":"module-local"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"LiteralStringSymbol","value":":required"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"module "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"and "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"require "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"Punctuation","value":"))]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"assert-compile"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"= "}, + {"type":"NameBuiltin","value":"module "}, + {"type":"NameVariable","value":"nil"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"not= "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameBuiltin","value":"module "}, + {"type":"NameVariable","value":"field"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"nil"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"string.format "}, + {"type":"LiteralString","value":"\"Missing field %s in module %s\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"NameVariable","value":"field"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":?"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":?"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"symbol"}, + {"type":"Punctuation","value":")))"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Punctuation","value":"("}, + {"type":"KeywordDeclaration","value":"fn "}, + {"type":"NameVariable","value":"arity-check?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"module"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"-?\u003e "}, + {"type":"NameBuiltin","value":"module getmetatable "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"LiteralStringSymbol","value":":arity-check?"}, + {"type":"Punctuation","value":")))"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Punctuation","value":"("}, + {"type":"KeywordDeclaration","value":"fn "}, + {"type":"NameVariable","value":"arity-check-call"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"[["}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"\u0026"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"args"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"scope"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralString","value":"\"Perform static arity checks on static function calls in a module.\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"let "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"arity"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Operator","value":"#"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"args"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"last-arg"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameVariable","value":"args"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"arity"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"f-local"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"field"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"multi-sym?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"[])"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"-?\u003e "}, + {"type":"NameVariable","value":"scope.symmeta"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"tostring "}, + {"type":"NameVariable","value":"f-local"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"LiteralStringSymbol","value":":required"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"module "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"and "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"require "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"Punctuation","value":"))]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"when "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"and "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"arity-check?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"module"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"_G.debug"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"_G.debug.getinfo"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"not "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"varg?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"last-arg"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"not "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"list?"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"last-arg"}, + {"type":"Punctuation","value":")))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"assert-compile"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"= "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"type "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameBuiltin","value":"module "}, + {"type":"NameVariable","value":"field"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":function"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"string.format "}, + {"type":"LiteralString","value":"\"Missing function %s in module %s\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"NameVariable","value":"field"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":?"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"module-name"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"match "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"_G.debug.getinfo"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameBuiltin","value":"module "}, + {"type":"NameVariable","value":"field"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"{"}, + {"type":"Keyword","value":": "}, + {"type":"NameVariable","value":"nparams"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":what"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"Lua\""}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":isvararg"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"true"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"assert-compile"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"\u003c= "}, + {"type":"NameVariable","value":"nparams"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Operator","value":"#"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"args"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":": "}, + {"type":"LiteralString","value":"\"Called %s.%s with %s arguments, expected %s+\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralStringSymbol","value":":format"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f-local"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"field"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"arity"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"nparams"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"{"}, + {"type":"Keyword","value":": "}, + {"type":"NameVariable","value":"nparams"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":what"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"Lua\""}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":isvararg"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"false"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"assert-compile"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"= "}, + {"type":"NameVariable","value":"nparams"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Operator","value":"#"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"args"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":": "}, + {"type":"LiteralString","value":"\"Called %s.%s with %s arguments, expected %s\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralStringSymbol","value":":format"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f-local"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"field"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"arity"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"nparams"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"Punctuation","value":")))))"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Punctuation","value":"("}, + {"type":"KeywordDeclaration","value":"fn "}, + {"type":"NameVariable","value":"check-unused"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"ast"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"scope"}, + {"type":"Punctuation","value":"]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"each "}, + {"type":"Punctuation","value":"["}, + {"type":"NameVariable","value":"symname"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"pairs "}, + {"type":"NameVariable","value":"scope.symmeta"}, + {"type":"Punctuation","value":")]"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"assert-compile"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":". "}, + {"type":"NameVariable","value":"scope.symmeta"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"symname"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":used"}, + {"type":"Punctuation","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"NameFunction","value":"symname"}, + {"type":"LiteralStringSymbol","value":":find"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"^_\""}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"("}, + {"type":"NameBuiltin","value":"string.format "}, + {"type":"LiteralString","value":"\"unused local %s\""}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"("}, + {"type":"Keyword","value":"or "}, + {"type":"NameVariable","value":"symname"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralStringSymbol","value":":?"}, + {"type":"Punctuation","value":"))"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"ast"}, + {"type":"Punctuation","value":")))"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Punctuation","value":"{"}, + {"type":"LiteralStringSymbol","value":":destructure"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"save-require-meta"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralStringSymbol","value":":symbol-to-expression"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"check-module-fields"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralStringSymbol","value":":call"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"arity-check-call"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"CommentSingle","value":";; Note that this will only check unused args inside functions and let blocks,"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"CommentSingle","value":";; not top-level locals of a chunk."}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralStringSymbol","value":":fn"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"check-unused"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"LiteralStringSymbol","value":":do"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"check-unused"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n"} +] diff --git a/lexers/testdata/json.actual b/lexers/testdata/json.actual new file mode 100644 index 000000000..67e6714c1 --- /dev/null +++ b/lexers/testdata/json.actual @@ -0,0 +1,11 @@ +{ + "list": [1, 2, 3], + "map": { + "key": "value", + }, + // A comment + "number": 1.23, + "string": "string", + "positive": true, + "negative": false +} \ No newline at end of file diff --git a/lexers/testdata/json.expected b/lexers/testdata/json.expected new file mode 100644 index 000000000..053dd24b8 --- /dev/null +++ b/lexers/testdata/json.expected @@ -0,0 +1,56 @@ +[ + {"type":"Punctuation","value":"{"}, + {"type":"Text","value":"\n\t"}, + {"type":"NameTag","value":"\"list\""}, + {"type":"Punctuation","value":":"}, + {"type":"Text","value":" "}, + {"type":"Punctuation","value":"["}, + {"type":"LiteralNumberInteger","value":"1"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberInteger","value":"2"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberInteger","value":"3"}, + {"type":"Punctuation","value":"],"}, + {"type":"Text","value":"\n\t"}, + {"type":"NameTag","value":"\"map\""}, + {"type":"Punctuation","value":":"}, + {"type":"Text","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"Text","value":"\n\t\t"}, + {"type":"NameTag","value":"\"key\""}, + {"type":"Punctuation","value":":"}, + {"type":"Text","value":" "}, + {"type":"LiteralStringDouble","value":"\"value\""}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":"\n\t"}, + {"type":"Punctuation","value":"},"}, + {"type":"Text","value":"\n\t"}, + {"type":"CommentSingle","value":"// A comment\n"}, + {"type":"Text","value":"\t"}, + {"type":"NameTag","value":"\"number\""}, + {"type":"Punctuation","value":":"}, + {"type":"Text","value":" "}, + {"type":"LiteralNumberFloat","value":"1.23"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":"\n\t"}, + {"type":"NameTag","value":"\"string\""}, + {"type":"Punctuation","value":":"}, + {"type":"Text","value":" "}, + {"type":"LiteralStringDouble","value":"\"string\""}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":"\n\t"}, + {"type":"NameTag","value":"\"positive\""}, + {"type":"Punctuation","value":":"}, + {"type":"Text","value":" "}, + {"type":"KeywordConstant","value":"true"}, + {"type":"Punctuation","value":","}, + {"type":"Text","value":"\n\t"}, + {"type":"NameTag","value":"\"negative\""}, + {"type":"Punctuation","value":":"}, + {"type":"Text","value":" "}, + {"type":"KeywordConstant","value":"false"}, + {"type":"Text","value":"\n"}, + {"type":"Punctuation","value":"}"} +]