Write RBS type annotations directly in Ruby source files using comment syntax. Use this when adding types to Ruby code with the rbs-inline gem.
Write type signatures directly in Ruby source files using special comments. Requires the rbs-inline gem.
Every file needs the magic comment:
# rbs_inline: enabled
class Person
attr_reader :name #: String
attr_reader :age #: Integer?
#: (String, ?Integer?) -> void
def initialize(name, age = nil)
@name = name
@age = age
end
end
#: (Most Concise)# Before method
#: (String) -> Integer
def count(text)
text.length
end
# Inline return type
def name #: String
@name
end
# Multiple overloads
#: () -> String?
#: (Integer) -> Array[String]
def fetch(n = nil)
n ? @items.take(n) : @items.first
end
# @rbs (Structured)# @rbs (String, Integer) -> String
def format(text, width)
text.ljust(width)
end
# Overloading with pipe
# @rbs (String) -> Integer
# | (Integer) -> Integer
def double(value)
value * 2
end
# @rbs text: String -- Input text
# @rbs width: Integer -- Max width
# @rbs strict: bool -- Strict mode
# @rbs return: Array[String]
def wrap(text, width: 80, strict: false)
# Implementation
end
attr_reader :name #: String
attr_accessor :count #: Integer
# @rbs @items: Array[String] # Instance variable
# @rbs self.@cache: Hash[Symbol, T] # Class instance variable
VERSION = "1.0" #: String # Constant
# Required block
# @rbs () { (String) -> void } -> void
def each(&block)
@items.each(&block)
end
# Optional block (? before type)
# @rbs () { (Integer) -> void }? -> Integer?
def process(&block)
yield(42) if block
end
# Using boolish for filters
#: () { (String) -> boolish } -> Array[String]
def select(&block)
@items.select(&block)
end
# @rbs generic T
class Container
# @rbs (T) -> void
def initialize(value)
@value = value
end
#: () -> T
def get
@value
end
end
Specify type parameters for generic modules using #[Type]:
include Enumerable #[String]
include Comparable #[self]
include MyGeneric #[Integer | nil]
# @rbs!)Use for DSL-generated methods or interface declarations:
# For DSL-generated methods
# @rbs!
# attr_accessor name: String
# attr_accessor email: String?
# For interface methods (expected from mixins)
# @rbs!
# def current_user: () -> User?
# def authorized?: (Symbol) -> bool
# Skip RBS generation
# @rbs skip
def internal_method; end
# Override inherited method
# @rbs override
def process(data)
super
end
# Generate to stdout
bundle exec rbs-inline lib
# Save to sig/generated
bundle exec rbs-inline --output lib
# Watch for changes
bundle exec rbs-inline --watch lib
# rbs_inline: enabled? goes before type: { (T) -> U }?Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer