--- title: "API Reference" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{API Reference} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` 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:** ```r 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](features-tour.html#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:** ```{r} 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:** ```r 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](features-tour.html#show_source_info---display-file-information) | | `source_info_style` | character | `"inline"` | Source info style: "inline", "subgraph" | | `enable_clicks` | logical | `FALSE` | Make nodes clickable. See [Features Tour](features-tour.html#enable_clicks---clickable-nodes) | | `click_protocol` | character | `"vscode"` | Click protocol: "vscode", "rstudio", "file" | | `log_level` | character | `NULL` | Override log level. See [Features Tour](features-tour.html#debugging-with-logging) | **Returns:** - `"console"`: Prints to console, returns invisible `NULL` - `"file"`: Writes to file, returns file path - `"clipboard"`: Copies to clipboard, returns invisible `NULL` - `"raw"`: Returns Mermaid code as character string **Examples:** ```{r} 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` | Print | 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:** ```r 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:** ```{r} # 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:** ```r 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:** ```{r} # 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:** ```r 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:** ```{r} # 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:** ```r 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:** ```{r} # 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:** ```r 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:** ```{r} # 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:** ```r 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:** ```{r} 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:** ```r get_supported_extensions() ``` **Returns:** Character vector of supported file extensions (without dots). **Examples:** ```{r} 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:** ```r get_diagram_themes() ``` **Returns:** Character vector of theme names. **Examples:** ```{r} 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:** ```r 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:** ```{r} # 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:** ```r 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:** ```{r} # 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:** ```r is_valid_put_annotation(line) ``` **Parameters:** | Parameter | Type | Description | |-----------|------|-------------| | `line` | character | String to test | **Returns:** Logical: `TRUE` if valid PUT annotation, `FALSE` otherwise. **Examples:** ```{r} # 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:** ```r split_file_list(file_string) ``` **Parameters:** | Parameter | Type | Description | |-----------|------|-------------| | `file_string` | character | Comma-separated file names | **Returns:** Character vector of trimmed file names. **Examples:** ```{r} 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:** ```r run_sandbox() ``` **Requirements:** - `shiny` package (required) - `shinyAce` package (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:** ```{r} # Launch the sandbox run_sandbox() ``` --- ## Workflow Examples ### Basic Workflow ```{r} library(putior) # Extract and visualize workflow <- put("./src/") put_diagram(workflow) ``` ### Auto-Detection Pipeline ```{r} # 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 ```{r} 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 ```{r} # 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 | Guide | Description | |-------|-------------| | [Quick Start](quick-start.html) | First diagram in 2 minutes | | [Annotation Guide](annotation-guide.html) | Complete syntax reference | | [Features Tour](features-tour.html) | Auto-detection, themes, logging | | [Showcase](showcase.html) | Real-world examples | | [Quick Reference](quick-reference.html) | At-a-glance reference card | | [Troubleshooting](troubleshooting.html) | Common issues and solutions | | [AI Integration](ai-integration.html) | MCP/ACP integration guide |