{"id":16645613,"url":"https://github.com/boolangery/py-lua-parser","last_synced_at":"2025-05-15T20:04:15.024Z","repository":{"id":26735440,"uuid":"109603963","full_name":"boolangery/py-lua-parser","owner":"boolangery","description":"A Lua parser and AST builder written in Python.","archived":false,"fork":false,"pushed_at":"2025-03-12T20:37:52.000Z","size":777,"stargazers_count":126,"open_issues_count":3,"forks_count":44,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-12T13:17:22.955Z","etag":null,"topics":["ast","lua","parser","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boolangery.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-05T18:16:35.000Z","updated_at":"2025-04-13T03:12:39.000Z","dependencies_parsed_at":"2024-06-18T21:32:25.085Z","dependency_job_id":"689c163a-625d-4ebf-a9ad-21736610a740","html_url":"https://github.com/boolangery/py-lua-parser","commit_stats":{"total_commits":326,"total_committers":11,"mean_commits":"29.636363636363637","dds":0.08588957055214719,"last_synced_commit":"1f8a419bf56536444a91fadcf729378703aba702"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boolangery%2Fpy-lua-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boolangery%2Fpy-lua-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boolangery%2Fpy-lua-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boolangery%2Fpy-lua-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boolangery","download_url":"https://codeload.github.com/boolangery/py-lua-parser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254414499,"owners_count":22067272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","lua","parser","python"],"created_at":"2024-10-12T08:24:30.129Z","updated_at":"2025-05-15T20:04:13.414Z","avatar_url":"https://github.com/boolangery.png","language":"Python","readme":"py-lua-parser\n===============================================================================\n\n.. image:: https://github.com/boolangery/py-lua-parser/actions/workflows/python-package.yml/badge.svg\n    :target: https://github.com/boolangery/py-lua-parser/actions/workflows/python-package.yml\n.. image:: https://img.shields.io/pypi/v/luaparser.svg\n    :target: https://pypi.python.org/pypi/luaparser/\n.. image:: https://img.shields.io/pypi/pyversions/luaparser.svg\n    :target: https://pypi.python.org/pypi/luaparser/\n\nA Lua parser and AST builder written in Python.\n\nIt's both a development library and a command line tool.\n\n\nInstallation:\n------------------------------------------------------------------------------\n\nThe package can be installed through `pip`:\n\n.. code-block::\n\n    $ python3.6 -m pip install luaparser\n\nIt will install the shell command 'luaparser'.\n\n\nCompatibility with Lua grammar\n------------------------------------------------------------------------------\n\n3.2.1  =\u003e  Lua 5.3 grammar\n3.2.1+ =\u003e  Lua 5.4 grammar\n\nOptions\n------------------------------------------------------------------------------\n\nThese are the command-line flags:\n\nUsage: luaparser [options] filename\n\n.. code-block::\n\n    CLI Options:\n      --version                     Show program's version number and exit\n      -h, --help                    Show this help message and exit\n      -s, --source                  Source passed in a string\n      -x, --xml                     Set output format to xml\n      -o, --output                  Write output to file\n\n\nQuickstart\n==============================================================================\n\nNode structure\n------------------------------------------------------------------------------\n\nEach node contains the following data:\n\n.. code-block:: python\n\n\tclass Node:\n\t\t\"\"\"Base class for AST node.\"\"\"\n\t\tcomments: Comments\n\t\tfirst_token: Optional[Token]\n\t\tlast_token: Optional[Token]\n\t\tstart_char: Optional[int]\n\t\tstop_char: Optional[int]\n\t\tline: Optional[int]\n\n\nWorking on AST tree\n------------------------------------------------------------------------------\n\nMinimal exemple:\n\n.. code-block:: python\n\n    from luaparser import ast\n\n    src = \"\"\"\n        local function sayHello()\n          print('hello world !')\n        end\n        sayHello()\n        \"\"\"\n\n    tree = ast.parse(src)\n    print(ast.to_pretty_str(tree))\n\nwill display:\n\n.. code-block::\n\n    Chunk: {} 1 key\n      body: {} 1 key\n        Block: {} 1 key\n          body: [] 2 items\n            0: {} 1 key\n              LocalFunction: {} 3 keys\n                name: {} 1 key\n                  Name: {} 1 key\n                    id: \"sayHello\"\n                args: [] 0 item\n                body: [] 1 item\n                  0: {} 1 key\n                    Call: {} 2 keys\n                      func: {} 1 key\n                        Name: {} 1 key\n                          id: \"print\"\n                      args: [] 1 item\n                        0: {} 1 key\n                          String: {} 1 key\n                            s: \"hello world !\"\n            1: {} 1 key\n              Call: {} 2 keys\n                func: {} 1 key\n                  Name: {} 1 key\n                    id: \"sayHello\"\n                args: [] 0 item\n\n\nYou can run through the list of all the nodes in the tree using ast.walk(tree):\n\n.. code-block:: python\n\n    from luaparser import ast\n    from luaparser import astnodes\n\n    tree = ast.parse(\"local foo = 'bar'\")\n\n    for node in ast.walk(tree):\n        if isinstance(node, astnodes.Name):\n            process(node)\n\n\nAlternatively, you can use a node visitor:\n\n.. code-block:: python\n\n    from luaparser import ast\n    from luaparser import astnodes\n\n    src = \"local a = 42\"\n\n    class NumberVisitor(ast.ASTVisitor):\n        def visit_Number(self, node):\n            print('Number value = ' + str(node.n))\n\n    tree = ast.parse(src)\n    NumberVisitor().visit(tree)\n\n\nRendering lua code\n------------------------------------------------------------------------------\n\n.. warning:: Experimental feature\n\n.. code-block:: python\n\n    exp = Chunk(Block([\n        Forin(\n            targets=[Name('k'), Name('v')],\n            iter=[\n                Invoke(\n                    source=Name('bar'),\n                    func=Name('foo'),\n                    args=[Number(42)]\n                )\n            ],\n            body=Block([\n                Call(func=Name('print'), args=[Name('k'), Name('v')])\n            ]),\n\n        )\n    ]))\n\n    print(ast.to_lua_source(exp))\n\n\nWill render:\n\n.. code-block:: lua\n\n    for k, v in bar:foo(42) do\n        print(k, v)\n    end\n\n\nCommand line\n==============================================================================\n\nGiven:\n\n.. code-block:: lua\n\n    local function log(msg)\n      print(msg)\n    end\n\n    log(\"hello world !\")\n\n\n.. code-block:: bash\n\n    $ luaparser source.lua\n\n\nWill output:\n\n.. code-block:: json\n\n    {\n        \"Chunk\": {\n            \"body\": {\n                \"Block\": {\n                    \"body\": [\n                        {\n                            \"LocalFunction\": {\n                                \"name\": {\n                                    \"Name\": {\n                                        \"id\": \"log\"\n                                    }\n                                },\n                                \"args\": [\n                                    {\n                                        \"Name\": {\n                                            \"id\": \"msg\"\n                                        }\n                                    }\n                                ],\n                                \"body\": {\n                                    \"Block\": {\n                                        \"body\": [\n                                            {\n                                                \"Call\": {\n                                                    \"func\": {\n                                                        \"Name\": {\n                                                            \"id\": \"print\"\n                                                        }\n                                                    },\n                                                    \"args\": [\n                                                        {\n                                                            \"Name\": {\n                                                                \"id\": \"msg\"\n                                                            }\n                                                        }\n                                                    ]\n                                                }\n                                            }\n                                        ]\n                                    }\n                                }\n                            }\n                        },\n                        {\n                            \"Call\": {\n                                \"func\": {\n                                    \"Name\": {\n                                        \"id\": \"log\"\n                                    }\n                                },\n                                \"args\": [\n                                    {\n                                        \"String\": {\n                                            \"s\": \"hello world !\"\n                                        }\n                                    }\n                                ]\n                            }\n                        }\n                    ]\n                }\n            }\n        }\n    }\n\nCommand line\n==============================================================================\n\nDocumentation can be built with Sphinx:\n\n.. code-block::\n\n    $ cd doc\n    $ pip install -r requirements.txt\n    $ make html\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboolangery%2Fpy-lua-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboolangery%2Fpy-lua-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboolangery%2Fpy-lua-parser/lists"}