Skip to content

ruby/prism

Folders and files

NameName
Last commit message
Last commit date
Apr 2, 2025
Jan 4, 2025
May 14, 2024
May 21, 2024
Mar 20, 2025
Mar 19, 2025
Jul 1, 2024
Apr 14, 2025
Mar 18, 2025
Apr 14, 2025
Jan 14, 2025
Mar 18, 2025
Apr 11, 2025
Mar 27, 2025
Jan 14, 2025
Apr 12, 2025
Oct 16, 2024
Mar 23, 2025
Apr 11, 2025
Mar 31, 2025
Jun 4, 2024
Mar 23, 2025
Apr 11, 2025
Feb 28, 2024
Jun 2, 2023
Sep 27, 2023
Jul 26, 2024
Jan 20, 2025
Mar 4, 2024
Mar 18, 2025
Dec 21, 2022
May 24, 2024
Nov 30, 2023
Jan 8, 2025
Mar 31, 2025
Dec 21, 2022
Mar 22, 2025
Aug 29, 2024
Jul 3, 2024
Mar 23, 2025
Mar 18, 2025
Mar 23, 2025

Repository files navigation

Prism Ruby parser

Prism Ruby parser

This is a parser for the Ruby programming language. It is designed to be portable, error tolerant, and maintainable. It is written in C99 and has no dependencies.

Overview

The repository contains the infrastructure for both a shared library (libprism) and a native CRuby extension. The shared library has no bindings to CRuby itself, and so can be used by other projects. The native CRuby extension links against ruby.h, and so is suitable in the context of CRuby.

.
├── Makefile              configuration to compile the shared library and native tests
├── Rakefile              configuration to compile the native extension and run the Ruby tests
├── bin
│   ├── lex               runs the lexer on a file or string, prints the tokens, and compares to ripper
│   ├── parse             runs the parse on a file or string and prints the AST
│   └── prism             a CLI for development and debugging
├── config.yml            specification for tokens and nodes in the tree
├── doc                   documentation website
├── docs                  markdown documentation about the project
├── ext
│   └── prism
│       ├── extconf.rb    configuration to generate the Makefile for the native extension
│       └── extension.c   the native extension that interacts with libprism
├── fuzz                  files related to fuzz testing
├── gemfiles              gemfiles used by different Ruby versions in CI
├── include
│   ├── prism             header files for the shared library
│   └── prism.h           main header file for the shared library
├── java                  Java bindings for the shared library
├── java-wasm             Java WASM bindings for the shared library
├── javascript            JavaScript WASM bindings for the shared library
├── lib
│   ├── prism             Ruby library files
│   └── prism.rb          main entrypoint for the Ruby library
├── rakelib               various Rake tasks for the project
├── rbi                   RBI type signatures for the Ruby library
├── rust
│   ├── ruby-prism        Rustified crate for the shared library
│   └── ruby-prism-sys    FFI binding for Rust
├── sample
│   └── prism             Sample code that uses the Ruby API for documentation purposes
├── sig                   RBS type signatures for the Ruby library
├── src
│   ├── util              various utility files
│   └── prism.c           main entrypoint for the shared library
├── templates             contains ERB templates generated by templates/template.rb
│   └── template.rb       generates code from the nodes and tokens configured by config.yml
└── test
    └── prism
        ├── fixtures      Ruby code used for testing
        └── snapshots     snapshots of generated syntax trees corresponding to fixtures

Getting started

To compile the shared library, you will need:

  • C99 compiler
  • GNU make
  • Ruby 2.7.0 or later

Once you have these dependencies, run:

bundle install

to fetch the Ruby dependencies. Finally, run:

bundle exec rake compile

to compile the shared library. It will be built in the build directory. To test that everything is working, run:

bin/parse -e "1 + 2"

to see the syntax tree for the expression 1 + 2.

Contributing

See the CONTRIBUTING.md file for more information. We additionally have documentation about the overall design of the project as well as various subtopics.

Examples

Prism has been integrated into the majority of Ruby runtimes, many libraries, and some applications. Below is a list of some of the projects that use Prism:

Runtimes

Libraries

Applications