This vignette provides comprehensive documentation for all exported functions in the putior package.
Function Overview
| Function | Category | Purpose |
|---|---|---|
put() |
Core | Extract annotations from source files |
put_diagram() |
Core | Generate Mermaid flowchart diagrams |
put_auto() |
Auto-Annotation | Auto-detect workflow from code patterns |
put_generate() |
Auto-Annotation | Generate annotation comments for files |
put_merge() |
Auto-Annotation | Combine manual and auto annotations |
get_detection_patterns() |
Configuration | View/customize detection patterns |
list_supported_languages() |
Configuration | List supported programming languages |
get_comment_prefix() |
Configuration | Get comment prefix for file extension |
get_supported_extensions() |
Configuration | List all supported file extensions |
get_diagram_themes() |
Configuration | List available diagram themes |
put_theme() |
Configuration | Create custom color palette |
set_putior_log_level() |
Configuration | Configure logging verbosity |
is_valid_put_annotation() |
Utilities | Validate annotation syntax |
split_file_list() |
Utilities | Parse comma-separated file lists |
run_sandbox() |
Interactive | Launch Shiny sandbox app |
Core Functions
put() - Extract Annotations from Files
The primary function for extracting PUT annotations from source code files.
Usage:
put(
path = ".",
pattern = "\\.(R|r|py|sql|sh|jl)$",
recursive = TRUE,
include_line_numbers = FALSE,
validate = TRUE,
exclude = NULL,
log_level = NULL
)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
path |
character | "." |
File or directory path to scan |
pattern |
character | "\\.(R|r|py|sql|sh|jl)$" |
Regex pattern for file matching |
recursive |
logical | TRUE |
Search subdirectories |
include_line_numbers |
logical | FALSE |
Include line numbers in output |
validate |
logical | TRUE |
Show validation warnings |
exclude |
character | NULL |
Regex patterns to exclude files (e.g., "test" skips
test files) |
log_level |
character | NULL |
Override log level. See Debugging with Logging |
Returns:
A data frame with columns:
| Column | Description |
|---|---|
file_name |
Source file containing the annotation |
file_type |
Programming language (r, py, sql, etc.) |
id |
Unique node identifier (auto-generated if omitted) |
label |
Human-readable description |
node_type |
Type: input, process, output, decision, start, end.
(artifact is auto-created by
put_diagram()) |
input |
Comma-separated input files |
output |
Comma-separated output files |
line_number |
Line number (if include_line_numbers = TRUE) |
Examples:
library(putior)
# Scan a directory
workflow <- put("./src/")
# Scan with line numbers (recursive by default)
workflow <- put("./project/", include_line_numbers = TRUE)
# Scan only R files
workflow <- put("./analysis/", pattern = "\\.R$")
# Single file
workflow <- put("./main.R")
# With debug logging
workflow <- put("./src/", log_level = "DEBUG")
put_diagram() - Generate Mermaid Diagrams
Converts workflow data into Mermaid flowchart syntax.
Usage:
put_diagram(
workflow,
output = "console",
file = NULL,
direction = "TD",
theme = "github",
show_artifacts = FALSE,
show_files = FALSE,
style_nodes = TRUE,
show_workflow_boundaries = TRUE,
node_labels = "label",
title = NULL,
show_source_info = FALSE,
source_info_style = "inline",
enable_clicks = FALSE,
click_protocol = "vscode",
log_level = NULL
)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
workflow |
data.frame | (required) | Workflow data from put()
|
output |
character | "console" |
Output mode: “console”, “file”, “clipboard”, “raw” |
file |
character | NULL |
Output file path (when output = “file”) |
direction |
character | "TD" |
Flow direction: “TD”, “LR”, “BT”, “RL” |
theme |
character | "github" |
Theme: “github”, “light”, “dark”, “auto”, “minimal”, “viridis”, “magma”, “plasma”, “cividis” (colorblind-safe) |
show_artifacts |
logical | FALSE |
Show data file nodes |
show_files |
logical | FALSE |
Show file names on connections |
style_nodes |
logical | TRUE |
Apply color styling to nodes |
show_workflow_boundaries |
logical | TRUE |
Special styling for start/end nodes |
node_labels |
character | "label" |
Label style: “name”, “label”, “both” |
title |
character | NULL |
Optional diagram title |
show_source_info |
logical | FALSE |
Display source file info in nodes. See Features Tour |
source_info_style |
character | "inline" |
Source info style: “inline”, “subgraph” |
enable_clicks |
logical | FALSE |
Make nodes clickable. See Features Tour |
click_protocol |
character | "vscode" |
Click protocol: “vscode”, “rstudio”, “file” |
log_level |
character | NULL |
Override log level. See Features Tour |
Returns:
-
"console": Prints to console, returns invisibleNULL -
"file": Writes to file, returns file path -
"clipboard": Copies to clipboard, returns invisibleNULL -
"raw": Returns Mermaid code as character string
Examples:
library(putior)
workflow <- put("./src/")
# Basic diagram to console
put_diagram(workflow)
# With theme and direction
put_diagram(workflow, theme = "dark", direction = "LR")
# Show data artifacts
put_diagram(workflow, show_artifacts = TRUE, show_files = TRUE)
# Interactive features
put_diagram(workflow,
show_source_info = TRUE,
enable_clicks = TRUE,
click_protocol = "rstudio")
# Save to file
put_diagram(workflow, output = "file", file = "workflow.md", title = "My Pipeline")
# Get raw code for embedding
mermaid_code <- put_diagram(workflow, output = "raw")Theme Comparison:
| Theme | Best For | Description |
|---|---|---|
github |
GitHub README | Optimized for GitHub rendering |
light |
Light backgrounds | Bright, colorful nodes |
dark |
Dark backgrounds | Muted colors on dark |
auto |
Adaptive | Works in both light/dark modes |
minimal |
Reports | Professional grayscale |
viridis |
Accessibility | Colorblind-safe (purple-blue-green-yellow) |
magma |
Colorblind-safe warm (purple-red-yellow) | |
plasma |
Presentations | Colorblind-safe vibrant (purple-pink-yellow) |
cividis |
Max accessibility | Blue-yellow only (red-green safe) |
Auto-Annotation Functions
put_auto() - Auto-detect Workflow from Code
Analyzes source code to automatically detect inputs, outputs, and dependencies without requiring manual annotations.
Usage:
put_auto(
path = ".",
pattern = "\\.(R|r|py|sql|sh|jl)$",
recursive = TRUE,
detect_inputs = TRUE,
detect_outputs = TRUE,
detect_dependencies = TRUE,
exclude = NULL,
log_level = NULL
)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
path |
character | "." |
File or directory to analyze |
pattern |
character | "\\.(R|r|py|sql|sh|jl)$" |
File pattern |
recursive |
logical | TRUE |
Search subdirectories |
detect_inputs |
logical | TRUE |
Detect file read operations |
detect_outputs |
logical | TRUE |
Detect file write operations |
detect_dependencies |
logical | TRUE |
Detect script dependencies |
exclude |
character | NULL |
Regex patterns to exclude files |
log_level |
character | NULL |
Override log level |
Returns:
A data frame with the same structure as put(),
containing auto-detected workflow nodes.
Examples:
# Auto-detect workflow from code patterns
workflow <- put_auto("./src/")
put_diagram(workflow)
# Only detect inputs and outputs (no dependencies)
workflow <- put_auto("./src/", detect_dependencies = FALSE)
# With debugging
workflow <- put_auto("./src/", log_level = "DEBUG")
put_generate() - Generate Annotation Comments
Analyzes code and generates PUT annotation comments that can be added to source files. Similar to how roxygen2 generates documentation skeletons.
Usage:
put_generate(
path = ".",
pattern = "\\.(R|r|py|sql|sh|jl)$",
recursive = TRUE,
output = "console",
style = "single",
exclude = NULL,
log_level = NULL
)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
path |
character | "." |
File or directory to analyze |
pattern |
character | "\\.(R|r|py|sql|sh|jl)$" |
File pattern |
recursive |
logical | TRUE |
Search subdirectories |
output |
character | "console" |
Output: “console” or “clipboard” |
style |
character | "single" |
Annotation style: “single” or “multiline” |
exclude |
character | NULL |
Regex patterns to exclude files |
log_level |
character | NULL |
Override log level |
Returns:
Invisibly returns the generated annotation text.
Examples:
# Print suggested annotations to console
put_generate("./src/")
# Copy to clipboard for pasting into files
put_generate("./src/", output = "clipboard")
# Generate multiline annotations
put_generate("./src/", style = "multiline")
put_merge() - Combine Manual and Auto Annotations
Combines manually written annotations with auto-detected ones using configurable merge strategies.
Usage:
put_merge(
path = ".",
pattern = "\\.(R|r|py|sql|sh|jl)$",
recursive = TRUE,
merge_strategy = "manual_priority",
exclude = NULL,
log_level = NULL
)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
path |
character | "." |
File or directory to process |
pattern |
character | "\\.(R|r|py|sql|sh|jl)$" |
File pattern |
recursive |
logical | TRUE |
Search subdirectories |
merge_strategy |
character | "manual_priority" |
Merge strategy (see below) |
exclude |
character | NULL |
Regex patterns to exclude files |
log_level |
character | NULL |
Override log level |
Merge Strategies:
| Strategy | Description |
|---|---|
"manual_priority" |
Manual annotations override auto-detected |
"supplement" |
Auto fills in missing input/output fields |
"union" |
Combine all detected I/O from both sources |
Returns:
A data frame containing merged workflow data.
Examples:
# Manual annotations take priority
workflow <- put_merge("./src/", merge_strategy = "manual_priority")
# Auto-detected I/O supplements manual annotations
workflow <- put_merge("./src/", merge_strategy = "supplement")
# Combine everything
workflow <- put_merge("./src/", merge_strategy = "union")
put_diagram(workflow)Configuration Functions
get_detection_patterns() - View Detection Patterns
Returns the detection patterns used for auto-detecting inputs, outputs, and dependencies.
Usage:
get_detection_patterns(language = "r", type = NULL)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
language |
character | "r" |
Language: “r”, “python”, “sql”, “shell”, “julia” |
type |
character | NULL |
Filter by type: “input”, “output”, “dependency” |
Returns:
A list of patterns. Each pattern contains:
-
regex: Regular expression to match the function call -
func: Function name -
arg_position: Position of the file path argument -
arg_name: Named argument for file path -
description: Human-readable description
Examples:
# Get all R patterns
patterns <- get_detection_patterns("r")
# Get only input patterns for Python
input_patterns <- get_detection_patterns("python", type = "input")
# View R output patterns
output_patterns <- get_detection_patterns("r", type = "output")
length(output_patterns) # Number of output patterns
list_supported_languages() - List Supported
Languages
Returns the programming languages supported by putior.
Usage:
list_supported_languages(detection_only = FALSE)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
detection_only |
logical | FALSE |
If TRUE, only languages with auto-detection patterns |
Returns:
Character vector of supported language names.
Examples:
# All languages with annotation support (25+)
list_supported_languages()
#> [1] "r" "python" "shell" "julia" "ruby"
#> [6] "perl" "yaml" "toml" "sql" "lua"
#> ...
# Only languages with auto-detection patterns
list_supported_languages(detection_only = TRUE)
#> [1] "r" "python" "sql" "shell" "julia"
get_comment_prefix() - Get Comment Prefix for
Extension
Returns the appropriate comment prefix for a given file extension.
Usage:
get_comment_prefix(ext)Parameters:
| Parameter | Type | Description |
|---|---|---|
ext |
character | File extension (without dot) |
Returns:
Character string: the comment prefix for that language.
Comment Prefix Groups:
| Prefix | Languages |
|---|---|
# |
R, Python, Shell, Julia, Ruby, Perl, YAML, TOML |
-- |
SQL, Lua, Haskell |
// |
JavaScript, TypeScript, C, C++, Java, Go, Rust, Swift, Kotlin, C#, PHP, Scala |
% |
MATLAB, LaTeX |
Examples:
get_comment_prefix("r")
#> [1] "#"
get_comment_prefix("sql")
#> [1] "--"
get_comment_prefix("js")
#> [1] "//"
get_comment_prefix("m")
#> [1] "%"
# Unknown extensions default to "#"
get_comment_prefix("xyz")
#> [1] "#"
get_supported_extensions() - List All Supported
Extensions
Returns all file extensions that putior can process.
Usage:
Returns:
Character vector of supported file extensions (without dots).
Examples:
get_supported_extensions()
#> [1] "r" "py" "sh" "bash" "jl" "rb" "pl" "yaml"
#> [9] "yml" "toml" "sql" "lua" "hs" "js" "ts" "jsx"
#> ...
get_diagram_themes() - List Available Themes
Returns the names of available diagram themes.
Usage:
Returns:
Character vector of theme names.
Examples:
get_diagram_themes()
#> $light
#> [1] "Default light theme with bright colors - perfect for documentation sites"
#>
#> $dark
#> [1] "Dark theme with muted colors - ideal for dark mode environments and terminals"
#>
#> $auto
#> [1] "GitHub-adaptive theme with solid colors that work in both light and dark modes"
#>
#> $minimal
#> [1] "Grayscale professional theme - print-friendly and great for business documents"
#>
#> $github
#> [1] "Optimized specifically for GitHub README files with maximum mermaid compatibility"
#>
#> $viridis
#> [1] "Colorblind-safe theme (purple-blue-green-yellow) - perceptually uniform, accessible"
#>
#> $magma
#> [1] "Colorblind-safe warm theme (purple-red-yellow) - high contrast, print-friendly"
#>
#> $plasma
#> [1] "Colorblind-safe vibrant theme (purple-pink-yellow) - bold colors for presentations"
#>
#> $cividis
#> [1] "Colorblind-safe theme optimized for deuteranopia/protanopia (blue-yellow only)"
# Use with put_diagram
put_diagram(workflow, theme = "viridis")
put_theme() - Create Custom Theme
Creates a custom color palette by overriding specific node types from a base theme.
Usage:
put_theme(
base = "light",
input = NULL,
process = NULL,
output = NULL,
decision = NULL,
artifact = NULL,
start = NULL,
end = NULL
)Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
base |
character | "light" |
Base theme to override |
input |
named character | NULL |
Named vector:
c(fill = "#hex", stroke = "#hex", color = "#hex")
|
process |
named character | NULL |
Same format as input
|
output |
named character | NULL |
Same format as input
|
decision |
named character | NULL |
Same format as input
|
artifact |
named character | NULL |
Same format as input
|
start |
named character | NULL |
Same format as input
|
end |
named character | NULL |
Same format as input
|
Returns:
A putior_theme object for use with
put_diagram(palette = ...).
Examples:
# Create a custom palette based on the dark theme
my_theme <- put_theme(
base = "dark",
input = c(fill = "#1a5276", stroke = "#2e86c1", color = "#ffffff"),
process = c(fill = "#1e8449", stroke = "#27ae60", color = "#ffffff")
)
# Apply to diagram
workflow <- put("./src/")
put_diagram(workflow, palette = my_theme)
set_putior_log_level() - Configure Logging
Sets the logging verbosity for putior functions. Requires the
optional logger package.
Usage:
set_putior_log_level(level = "WARN")Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
level |
character | "WARN" |
Log level: “DEBUG”, “INFO”, “WARN”, “ERROR” |
Log Levels:
| Level | Description |
|---|---|
DEBUG |
Most verbose - file-by-file details, pattern matching |
INFO |
Progress updates - scan started, nodes found |
WARN |
Default - only warnings and issues |
ERROR |
Errors only |
Examples:
# Enable debug logging for troubleshooting
set_putior_log_level("DEBUG")
workflow <- put("./src/")
# Return to normal
set_putior_log_level("WARN")
# Or use per-call override
workflow <- put("./src/", log_level = "INFO")Utility Functions
is_valid_put_annotation() - Validate Annotation
Syntax
Tests whether a string is a valid PUT annotation.
Usage:
is_valid_put_annotation(line)Parameters:
| Parameter | Type | Description |
|---|---|---|
line |
character | String to test |
Returns:
Logical: TRUE if valid PUT annotation,
FALSE otherwise.
Examples:
# Valid annotations - hash style (R, Python)
is_valid_put_annotation('# put label:"My Step"')
#> [1] TRUE
is_valid_put_annotation('# put id:"step1", label:"Process Data", node_type:"process"')
#> [1] TRUE
# Valid annotations - dash style (SQL)
is_valid_put_annotation('-- put label:"Load Data"')
#> [1] TRUE
is_valid_put_annotation('-- put id:"query", label:"SQL Query"')
#> [1] TRUE
# Valid annotations - slash style (JavaScript)
is_valid_put_annotation('// put label:"Process JSON"')
#> [1] TRUE
# Valid annotations - percent style (MATLAB)
is_valid_put_annotation('% put label:"Compute Statistics"')
#> [1] TRUE
# Invalid annotations
is_valid_put_annotation("# put invalid syntax")
#> [1] FALSE
is_valid_put_annotation("# Regular comment")
#> [1] FALSE
split_file_list() - Parse File Lists
Splits a comma-separated file list string into a character vector.
Usage:
split_file_list(file_string)Parameters:
| Parameter | Type | Description |
|---|---|---|
file_string |
character | Comma-separated file names |
Returns:
Character vector of trimmed file names.
Examples:
split_file_list("data.csv, results.json, report.html")
#> [1] "data.csv" "results.json" "report.html"
split_file_list("single_file.csv")
#> [1] "single_file.csv"
split_file_list("")
#> character(0)
run_sandbox() - Launch Interactive Sandbox
Launches an interactive Shiny app for experimenting with PUT annotations.
Usage:
Requirements:
-
shinypackage (required) -
shinyAcepackage (optional, for syntax highlighting)
Features:
- Paste or type annotated code
- Simulate multiple files using
# ===== File: name.R =====markers - Customize diagram settings (theme, direction, artifacts, etc.)
- View extracted workflow data
- Export generated Mermaid code
- Copy to clipboard
Examples:
# Launch the sandbox
run_sandbox()Workflow Examples
Basic Workflow
library(putior)
# Extract and visualize
workflow <- put("./src/")
put_diagram(workflow)Auto-Detection Pipeline
# Analyze code automatically
auto_workflow <- put_auto("./src/")
# Generate annotation suggestions
put_generate("./src/", output = "clipboard")
# Combine manual + auto
merged <- put_merge("./src/", merge_strategy = "supplement")
put_diagram(merged)Interactive Documentation
workflow <- put("./src/", include_line_numbers = TRUE)
put_diagram(workflow,
theme = "github",
show_source_info = TRUE,
source_info_style = "subgraph",
enable_clicks = TRUE,
click_protocol = "vscode",
output = "file",
file = "workflow.md"
)Debugging
# Enable verbose logging
set_putior_log_level("DEBUG")
# Extract with debugging
workflow <- put("./src/", include_line_numbers = TRUE)
# Test individual annotations
is_valid_put_annotation('# put label:"Test"')
# Return to normal
set_putior_log_level("WARN")See Also
- Quick Start - First diagram in 2 minutes
- Annotation Guide - Complete syntax reference
- Quick Reference - Cheat sheet for daily use
- Features Tour - Overview of advanced features
- Showcase - Real-world examples