synthra 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +4 -0
- data/.rubocop.yml +40 -0
- data/.yardopts +18 -0
- data/ACCESS_DOCS.md +116 -0
- data/ADVANCED_FEATURES_SUMMARY.md +245 -0
- data/CHANGELOG.md +498 -0
- data/CODE_OF_CONDUCT.md +122 -0
- data/CONTRIBUTING.md +307 -0
- data/DOCUMENTATION.md +204 -0
- data/DOCUMENTATION_GUIDE.md +194 -0
- data/LICENSE +22 -0
- data/README.md +1458 -0
- data/Rakefile +128 -0
- data/benchmark/README.md +591 -0
- data/benchmark/batch_generation.rb +63 -0
- data/benchmark/engine_comparison.rb +295 -0
- data/benchmark/single_record.rb +108 -0
- data/benchmark/streaming.rb +74 -0
- data/docs/ACTIVERECORD_INFERENCE.md +524 -0
- data/docs/API_SERVER.md +278 -0
- data/docs/CONFIG_FILE.md +315 -0
- data/docs/DATA_CONTRACTS.md +312 -0
- data/docs/ENHANCED_REPL.md +304 -0
- data/docs/FACTORY_BOT.md +271 -0
- data/docs/GITHUB_ACTION.md +420 -0
- data/docs/GRAPHQL_EXPORT.md +303 -0
- data/docs/GRAPHQL_FEDERATION.md +651 -0
- data/docs/HOW_TO_GENERATE_DOCS.md +252 -0
- data/docs/LSP.md +189 -0
- data/docs/MIGRATION_GENERATOR.md +547 -0
- data/docs/MOCK_SERVER.md +280 -0
- data/docs/NATIVE_ENGINE.md +298 -0
- data/docs/OPENAPI_EXPORT.md +252 -0
- data/docs/PERFORMANCE_MODE.md +228 -0
- data/docs/PERSONAS.md +547 -0
- data/docs/PROPERTY_TESTING.md +284 -0
- data/docs/PROTOBUF_EXPORT.md +276 -0
- data/docs/QUALITY_METRICS.md +555 -0
- data/docs/QUICK_REFERENCE.md +88 -0
- data/docs/RAILS_ENGINE.md +404 -0
- data/docs/RAILS_INTEGRATION.md +454 -0
- data/docs/README.md +175 -0
- data/docs/REPL_QUICK_REFERENCE.md +149 -0
- data/docs/RUST_INTEGRATION_GUIDE.md +1376 -0
- data/docs/SCENARIOS.md +576 -0
- data/docs/SECURITY_TESTING.md +318 -0
- data/docs/SNAPSHOT_TESTING.md +308 -0
- data/docs/STRING_TEXT_TYPES_REFERENCE.md +512 -0
- data/docs/TERRAFORM_EXPORT.md +447 -0
- data/docs/TIME_TRAVEL.md +507 -0
- data/docs/USAGE_GUIDE.md +980 -0
- data/docs/WEBHOOK_SIMULATOR.md +579 -0
- data/docs/advanced_features.md +183 -0
- data/docs/api_reference.md +153 -0
- data/docs/behaviors.md +138 -0
- data/docs/best_practices.md +191 -0
- data/docs/dsl_reference.md +172 -0
- data/docs/examples.md +162 -0
- data/docs/generation_modes.md +125 -0
- data/docs/getting_started.md +92 -0
- data/docs/index.html +177 -0
- data/docs/strategic/CLOUD_REGISTRY_ARCHITECTURE.md +268 -0
- data/docs/strategic/SIMD_OPTIMIZATION_STRATEGY.md +153 -0
- data/docs/troubleshooting.md +215 -0
- data/docs/type_reference.md +224 -0
- data/examples/hostile_mode_demo.rb +64 -0
- data/exe/synthra +6 -0
- data/ext/synthra_native/Cargo.lock +972 -0
- data/ext/synthra_native/Cargo.toml +46 -0
- data/ext/synthra_native/extconf.rb +41 -0
- data/ext/synthra_native/src/generator.rs +397 -0
- data/ext/synthra_native/src/lib.rs +229 -0
- data/ext/synthra_native/src/types.rs +1485 -0
- data/lib/generators/synthra/install_generator.rb +86 -0
- data/lib/generators/synthra/templates/api_response.dsl +15 -0
- data/lib/generators/synthra/templates/fake_data.rake +116 -0
- data/lib/generators/synthra/templates/synthra.yml +31 -0
- data/lib/generators/synthra/templates/synthra_support.rb +19 -0
- data/lib/generators/synthra/templates/user.dsl +11 -0
- data/lib/synthra/activerecord_inference.rb +394 -0
- data/lib/synthra/api.rb +381 -0
- data/lib/synthra/api_server.rb +718 -0
- data/lib/synthra/behaviors/applicator.rb +165 -0
- data/lib/synthra/behaviors/base.rb +155 -0
- data/lib/synthra/behaviors/close_connection.rb +60 -0
- data/lib/synthra/behaviors/deprecated.rb +100 -0
- data/lib/synthra/behaviors/failure.rb +69 -0
- data/lib/synthra/behaviors/latency.rb +103 -0
- data/lib/synthra/behaviors/partial_data.rb +83 -0
- data/lib/synthra/behaviors/randomize_order.rb +74 -0
- data/lib/synthra/behaviors/registry.rb +238 -0
- data/lib/synthra/behaviors/simulate_error.rb +79 -0
- data/lib/synthra/cli/commands/base.rb +105 -0
- data/lib/synthra/cli/commands/diff.rb +227 -0
- data/lib/synthra/cli/commands/docs.rb +67 -0
- data/lib/synthra/cli/commands/export.rb +150 -0
- data/lib/synthra/cli/commands/generate.rb +72 -0
- data/lib/synthra/cli/commands/import.rb +80 -0
- data/lib/synthra/cli/commands/lint.rb +53 -0
- data/lib/synthra/cli/commands/live.rb +57 -0
- data/lib/synthra/cli/commands/seed.rb +99 -0
- data/lib/synthra/cli/commands/validate.rb +28 -0
- data/lib/synthra/cli.rb +2471 -0
- data/lib/synthra/config_file.rb +129 -0
- data/lib/synthra/configuration.rb +281 -0
- data/lib/synthra/contracts_registry.rb +408 -0
- data/lib/synthra/database_seeder.rb +268 -0
- data/lib/synthra/deterministic_ids.rb +218 -0
- data/lib/synthra/documentation_generator.rb +414 -0
- data/lib/synthra/engine.rb +251 -0
- data/lib/synthra/errors.rb +1169 -0
- data/lib/synthra/export/base.rb +85 -0
- data/lib/synthra/export/csv.rb +101 -0
- data/lib/synthra/export/graphql.rb +266 -0
- data/lib/synthra/export/graphql_federation.rb +377 -0
- data/lib/synthra/export/graphviz.rb +258 -0
- data/lib/synthra/export/javascript.rb +327 -0
- data/lib/synthra/export/json_data.rb +61 -0
- data/lib/synthra/export/json_schema.rb +290 -0
- data/lib/synthra/export/openapi.rb +514 -0
- data/lib/synthra/export/protobuf.rb +483 -0
- data/lib/synthra/export/python.rb +560 -0
- data/lib/synthra/export/sql.rb +381 -0
- data/lib/synthra/export/sql_insert.rb +152 -0
- data/lib/synthra/export/terraform.rb +501 -0
- data/lib/synthra/export/type_mapping.rb +389 -0
- data/lib/synthra/export/typescript.rb +300 -0
- data/lib/synthra/export/xml_data.rb +104 -0
- data/lib/synthra/export/yaml_data.rb +56 -0
- data/lib/synthra/export.rb +404 -0
- data/lib/synthra/factory_bot_integration.rb +157 -0
- data/lib/synthra/field.rb +440 -0
- data/lib/synthra/functions/registry.rb +104 -0
- data/lib/synthra/generator/context.rb +372 -0
- data/lib/synthra/generator/engine.rb +336 -0
- data/lib/synthra/generator/faker_adapter.rb +425 -0
- data/lib/synthra/generator/modes.rb +444 -0
- data/lib/synthra/generator/resolver.rb +256 -0
- data/lib/synthra/generator/rng.rb +273 -0
- data/lib/synthra/generator/streamer.rb +63 -0
- data/lib/synthra/generator/uniqueness.rb +118 -0
- data/lib/synthra/initializer.rb +97 -0
- data/lib/synthra/limits.rb +279 -0
- data/lib/synthra/live_preview.rb +518 -0
- data/lib/synthra/loader_config.rb +78 -0
- data/lib/synthra/lsp/server.rb +689 -0
- data/lib/synthra/migration_generator.rb +301 -0
- data/lib/synthra/mixin.rb +174 -0
- data/lib/synthra/mock_server.rb +458 -0
- data/lib/synthra/native_engine.rb +304 -0
- data/lib/synthra/openapi_importer.rb +228 -0
- data/lib/synthra/output/json_formatter.rb +40 -0
- data/lib/synthra/output/ndjson_formatter.rb +55 -0
- data/lib/synthra/parser/ast.rb +1287 -0
- data/lib/synthra/parser/lexer.rb +1152 -0
- data/lib/synthra/parser/parser.rb +1664 -0
- data/lib/synthra/parser/tokens.rb +461 -0
- data/lib/synthra/performance_mode.rb +364 -0
- data/lib/synthra/personas.rb +397 -0
- data/lib/synthra/property_testing.rb +172 -0
- data/lib/synthra/quality_metrics.rb +405 -0
- data/lib/synthra/rails_test_helper.rb +248 -0
- data/lib/synthra/registry.rb +533 -0
- data/lib/synthra/relationships.rb +193 -0
- data/lib/synthra/repl/enhanced_repl.rb +607 -0
- data/lib/synthra/repl/formatter.rb +191 -0
- data/lib/synthra/scenarios.rb +423 -0
- data/lib/synthra/schema.rb +605 -0
- data/lib/synthra/schema_inheritance.rb +104 -0
- data/lib/synthra/schema_versioning.rb +212 -0
- data/lib/synthra/snapshot_testing.rb +199 -0
- data/lib/synthra/time_travel.rb +338 -0
- data/lib/synthra/type_definitions.rb +274 -0
- data/lib/synthra/types/address_location/addresses.rb +125 -0
- data/lib/synthra/types/address_location/airports.rb +200 -0
- data/lib/synthra/types/address_location/banks_hospitals.rb +207 -0
- data/lib/synthra/types/address_location/locations.rb +406 -0
- data/lib/synthra/types/base.rb +48 -0
- data/lib/synthra/types/commerce_products/commerce.rb +119 -0
- data/lib/synthra/types/commerce_products/companies.rb +71 -0
- data/lib/synthra/types/commerce_products/construction.rb +126 -0
- data/lib/synthra/types/commerce_products/products.rb +205 -0
- data/lib/synthra/types/core/collections.rb +513 -0
- data/lib/synthra/types/core/defaults.rb +76 -0
- data/lib/synthra/types/core/enums.rb +102 -0
- data/lib/synthra/types/core/identifiers.rb +445 -0
- data/lib/synthra/types/core/primitives.rb +586 -0
- data/lib/synthra/types/core/references.rb +466 -0
- data/lib/synthra/types/core/sequences.rb +304 -0
- data/lib/synthra/types/crypto/crypto.rb +162 -0
- data/lib/synthra/types/date_time/dates.rb +387 -0
- data/lib/synthra/types/finance_banking/banking.rb +424 -0
- data/lib/synthra/types/finance_banking/credit_cards.rb +24 -0
- data/lib/synthra/types/finance_banking/identifiers.rb +93 -0
- data/lib/synthra/types/formula.rb +184 -0
- data/lib/synthra/types/health_medical/medical.rb +150 -0
- data/lib/synthra/types/hostile_payloads.rb +122 -0
- data/lib/synthra/types/json_array.rb +51 -0
- data/lib/synthra/types/media_entertainment/media.rb +62 -0
- data/lib/synthra/types/naughty_string.rb +30 -0
- data/lib/synthra/types/personal_names/chinese.rb +41 -0
- data/lib/synthra/types/personal_names/identifiers.rb +187 -0
- data/lib/synthra/types/personal_names/names.rb +246 -0
- data/lib/synthra/types/personal_names/national_id.rb +89 -0
- data/lib/synthra/types/personal_names/titles_suffixes.rb +41 -0
- data/lib/synthra/types/regex.rb +248 -0
- data/lib/synthra/types/registry.rb +182 -0
- data/lib/synthra/types/repeating_element.rb +50 -0
- data/lib/synthra/types/scenario.rb +29 -0
- data/lib/synthra/types/technology_internet/apps.rb +67 -0
- data/lib/synthra/types/technology_internet/communication.rb +162 -0
- data/lib/synthra/types/technology_internet/devices.rb +80 -0
- data/lib/synthra/types/technology_internet/formats.rb +139 -0
- data/lib/synthra/types/technology_internet/networking.rb +143 -0
- data/lib/synthra/types/template.rb +92 -0
- data/lib/synthra/types/text_content/business.rb +128 -0
- data/lib/synthra/types/text_content/colors.rb +70 -0
- data/lib/synthra/types/text_content/misc.rb +237 -0
- data/lib/synthra/types/text_content/security.rb +130 -0
- data/lib/synthra/types/text_content/text_generation.rb +532 -0
- data/lib/synthra/types/travel/travel.rb +150 -0
- data/lib/synthra/utils/string_distance.rb +133 -0
- data/lib/synthra/validator/dsl_validator.rb +339 -0
- data/lib/synthra/validator/path_validator.rb +615 -0
- data/lib/synthra/version.rb +35 -0
- data/lib/synthra/webhook_simulator.rb +341 -0
- data/lib/synthra.rb +259 -0
- data/schemas/address.dsl +16 -0
- data/schemas/api_response.dsl +8 -0
- data/schemas/error_payload.dsl +9 -0
- data/schemas/order.dsl +10 -0
- data/schemas/order_item.dsl +8 -0
- data/schemas/payment.dsl +11 -0
- data/schemas/social_post.dsl +13 -0
- data/schemas/user.dsl +10 -0
- data/scripts/batch_fix_all.rb +96 -0
- data/scripts/delete_old_files.rb +32 -0
- data/scripts/fix_all_grouped_files.rb +137 -0
- data/scripts/fix_all_indentation.rb +48 -0
- data/scripts/fix_all_syntax.rb +124 -0
- data/scripts/fix_grouped_files.rb +184 -0
- data/scripts/fix_syntax_errors.rb +108 -0
- data/scripts/group_domain_types.rb +112 -0
- data/scripts/group_domain_types_fixed.rb +150 -0
- data/scripts/merge_domains_to_one_file.rb +68 -0
- data/scripts/move_existing_types.rb +130 -0
- data/scripts/split_grouped_types.rb +142 -0
- data/tech_docs/README.md +134 -0
- data/tech_docs/advanced/streaming.md +405 -0
- data/tech_docs/advanced/thread_safety.md +253 -0
- data/tech_docs/api/overview.md +485 -0
- data/tech_docs/appendices/type_chart.md +193 -0
- data/tech_docs/basic_concepts.md +383 -0
- data/tech_docs/behaviors/overview.md +346 -0
- data/tech_docs/dsl/complex_types.md +790 -0
- data/tech_docs/dsl/core_types.md +464 -0
- data/tech_docs/dsl/datetime_types.md +325 -0
- data/tech_docs/dsl/field_modifiers.md +414 -0
- data/tech_docs/dsl/grammar.md +431 -0
- data/tech_docs/dsl/schema_definition.md +399 -0
- data/tech_docs/export/README.md +276 -0
- data/tech_docs/installation.md +273 -0
- data/tech_docs/integration/ci_cd.md +707 -0
- data/tech_docs/integration/ci_cd_guide.md +579 -0
- data/tech_docs/integration/factory_bot.md +485 -0
- data/tech_docs/integration/rails.md +630 -0
- data/tech_docs/integration/rspec.md +449 -0
- data/tech_docs/modes/overview.md +350 -0
- data/tech_docs/performance/NATIVE_RUST_EXTENSION.md +1270 -0
- data/tech_docs/performance/OPTIMIZATION_GUIDE.md +901 -0
- data/tech_docs/quick_start.md +256 -0
- data/tech_docs/templates/README.md +805 -0
- data/tech_docs/tutorials/advanced.md +371 -0
- data/tech_docs/tutorials/getting_started.md +189 -0
- data/tech_docs/tutorials/intermediate.md +231 -0
- data/tech_docs/tutorials/template_gallery.md +569 -0
- data/tech_example/01_basic_usage.rb +238 -0
- data/tech_example/02_types_demo.rb +336 -0
- data/tech_example/04_cli_usage.md +429 -0
- data/tech_example/05_database_seeding.rb +283 -0
- data/tech_example/07_rspec_integration.rb +359 -0
- data/tech_example/10_custom_types.rb +387 -0
- data/tech_example/12_behaviors.rb +372 -0
- data/tech_example/13_twitter_dm_example.rb +120 -0
- data/tech_example/14_exact_json_structure.rb +253 -0
- data/tech_example/16_lsp_server.rb +56 -0
- data/tech_example/17_property_testing.rb +92 -0
- data/tech_example/18_enhanced_repl.rb +120 -0
- data/tech_example/19_security_fuzzing.rb +145 -0
- data/tech_example/NEW_FEATURES.md +169 -0
- data/tech_example/README.md +118 -0
- data/tech_example/schemas/api_response.dsl +123 -0
- data/tech_example/schemas/ecommerce.dsl +121 -0
- data/tech_example/schemas/twitter_dm.dsl +109 -0
- data/tech_example/schemas/user.dsl +36 -0
- data/vscode-extension/README.md +246 -0
- data/vscode-extension/language-configuration.json +31 -0
- data/vscode-extension/package.json +55 -0
- data/vscode-extension/snippets/fakedatadsl.json +198 -0
- data/vscode-extension/syntaxes/fakedatadsl.tmLanguage.json +128 -0
- metadata +478 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# How to Generate and Access YARD Documentation
|
|
2
|
+
|
|
3
|
+
This guide explains how to generate and view the YARD documentation for FakeDataDSL.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
Make sure you have the required gems installed:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bundle install
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or install YARD and Redcarpet manually:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
gem install yard
|
|
17
|
+
gem install redcarpet
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Generating Documentation
|
|
21
|
+
|
|
22
|
+
### Basic Generation
|
|
23
|
+
|
|
24
|
+
Generate documentation with default settings:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd /path/to/fake_data_dsl
|
|
28
|
+
bundle exec yard doc
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This will:
|
|
32
|
+
- Parse all Ruby files in `lib/`
|
|
33
|
+
- Include markdown files from `docs/`
|
|
34
|
+
- Generate HTML documentation in `doc/` directory
|
|
35
|
+
|
|
36
|
+
### With Options
|
|
37
|
+
|
|
38
|
+
Generate with specific options:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Generate to custom directory
|
|
42
|
+
bundle exec yard doc --output-dir public/docs
|
|
43
|
+
|
|
44
|
+
# Generate with statistics
|
|
45
|
+
bundle exec yard doc --stats
|
|
46
|
+
|
|
47
|
+
# Generate without private methods
|
|
48
|
+
bundle exec yard doc --no-private
|
|
49
|
+
|
|
50
|
+
# Generate with all methods (including private)
|
|
51
|
+
bundle exec yard doc --private
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Clean Generation
|
|
55
|
+
|
|
56
|
+
Remove old documentation and regenerate:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Remove old docs
|
|
60
|
+
rm -rf doc/
|
|
61
|
+
|
|
62
|
+
# Generate fresh
|
|
63
|
+
bundle exec yard doc
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Accessing Documentation
|
|
67
|
+
|
|
68
|
+
### Local HTML Files
|
|
69
|
+
|
|
70
|
+
After generation, open the documentation:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# On macOS
|
|
74
|
+
open doc/index.html
|
|
75
|
+
|
|
76
|
+
# On Linux
|
|
77
|
+
xdg-open doc/index.html
|
|
78
|
+
|
|
79
|
+
# On Windows
|
|
80
|
+
start doc/index.html
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Or use a web server:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Using Python
|
|
87
|
+
cd doc
|
|
88
|
+
python3 -m http.server 8000
|
|
89
|
+
# Then visit http://localhost:8000
|
|
90
|
+
|
|
91
|
+
# Using Ruby
|
|
92
|
+
cd doc
|
|
93
|
+
ruby -run -e httpd . -p 8000
|
|
94
|
+
# Then visit http://localhost:8000
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### File Structure
|
|
98
|
+
|
|
99
|
+
The generated documentation structure:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
doc/
|
|
103
|
+
├── index.html # Main documentation page
|
|
104
|
+
├── _index.html # Class/module index
|
|
105
|
+
├── file_list.html # List of all files
|
|
106
|
+
├── class_list.html # List of all classes
|
|
107
|
+
├── method_list.html # List of all methods
|
|
108
|
+
├── FakeDataDSL.html # Main module documentation
|
|
109
|
+
├── FakeDataDSL/
|
|
110
|
+
│ ├── Types.html # Types module
|
|
111
|
+
│ ├── Types/
|
|
112
|
+
│ │ ├── Base.html # Base type class
|
|
113
|
+
│ │ ├── Uuid.html # UUID type
|
|
114
|
+
│ │ └── ... # Other types
|
|
115
|
+
│ └── ...
|
|
116
|
+
└── docs/ # Markdown documentation
|
|
117
|
+
├── README.html
|
|
118
|
+
├── getting_started.html
|
|
119
|
+
└── ...
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Documentation Features
|
|
123
|
+
|
|
124
|
+
### Navigation
|
|
125
|
+
|
|
126
|
+
- **Classes** - Browse all classes and modules
|
|
127
|
+
- **Methods** - View all methods
|
|
128
|
+
- **Files** - See source file structure
|
|
129
|
+
- **Search** - Search across all documentation
|
|
130
|
+
|
|
131
|
+
### Markdown Files
|
|
132
|
+
|
|
133
|
+
All markdown files from `docs/` are included:
|
|
134
|
+
|
|
135
|
+
- Getting Started Guide
|
|
136
|
+
- DSL Reference
|
|
137
|
+
- Type Reference
|
|
138
|
+
- Behaviors Guide
|
|
139
|
+
- Generation Modes
|
|
140
|
+
- Advanced Features
|
|
141
|
+
- Examples
|
|
142
|
+
- API Reference
|
|
143
|
+
- Best Practices
|
|
144
|
+
- Troubleshooting
|
|
145
|
+
|
|
146
|
+
### Code Examples
|
|
147
|
+
|
|
148
|
+
All code examples are syntax-highlighted and can be copied directly.
|
|
149
|
+
|
|
150
|
+
## Continuous Documentation
|
|
151
|
+
|
|
152
|
+
### Pre-commit Hook
|
|
153
|
+
|
|
154
|
+
Generate docs before committing:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# .git/hooks/pre-commit
|
|
158
|
+
#!/bin/bash
|
|
159
|
+
bundle exec yard doc
|
|
160
|
+
git add doc/
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### CI/CD Integration
|
|
164
|
+
|
|
165
|
+
Generate docs in CI:
|
|
166
|
+
|
|
167
|
+
```yaml
|
|
168
|
+
# .github/workflows/docs.yml
|
|
169
|
+
name: Documentation
|
|
170
|
+
on:
|
|
171
|
+
push:
|
|
172
|
+
branches: [main]
|
|
173
|
+
jobs:
|
|
174
|
+
docs:
|
|
175
|
+
runs-on: ubuntu-latest
|
|
176
|
+
steps:
|
|
177
|
+
- uses: actions/checkout@v2
|
|
178
|
+
- uses: ruby/setup-ruby@v1
|
|
179
|
+
- run: bundle install
|
|
180
|
+
- run: bundle exec yard doc
|
|
181
|
+
- uses: peaceiris/actions-gh-pages@v3
|
|
182
|
+
with:
|
|
183
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
184
|
+
publish_dir: ./doc
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Publishing Documentation
|
|
188
|
+
|
|
189
|
+
### GitHub Pages
|
|
190
|
+
|
|
191
|
+
1. Generate documentation:
|
|
192
|
+
```bash
|
|
193
|
+
bundle exec yard doc
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
2. Push to `gh-pages` branch:
|
|
197
|
+
```bash
|
|
198
|
+
git checkout --orphan gh-pages
|
|
199
|
+
git rm -rf .
|
|
200
|
+
cp -r doc/* .
|
|
201
|
+
git add .
|
|
202
|
+
git commit -m "Update documentation"
|
|
203
|
+
git push origin gh-pages
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
3. Enable GitHub Pages in repository settings
|
|
207
|
+
|
|
208
|
+
### Read the Docs
|
|
209
|
+
|
|
210
|
+
1. Install `sphinx` and `sphinx-rtd-theme`
|
|
211
|
+
2. Convert YARD docs to Sphinx format
|
|
212
|
+
3. Configure Read the Docs
|
|
213
|
+
|
|
214
|
+
## Troubleshooting
|
|
215
|
+
|
|
216
|
+
### YARD Not Found
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# Install YARD
|
|
220
|
+
gem install yard
|
|
221
|
+
|
|
222
|
+
# Or use bundle
|
|
223
|
+
bundle install
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Redcarpet Not Found
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Install Redcarpet for markdown support
|
|
230
|
+
gem install redcarpet
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Documentation Not Updating
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# Clear cache and regenerate
|
|
237
|
+
rm -rf .yardoc doc/
|
|
238
|
+
bundle exec yard doc
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Missing Markdown Files
|
|
242
|
+
|
|
243
|
+
Ensure `.yardopts` includes:
|
|
244
|
+
```
|
|
245
|
+
docs/**/*.md
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## See Also
|
|
249
|
+
|
|
250
|
+
- [YARD Documentation](https://yardoc.org/)
|
|
251
|
+
- [YARD Guides](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md)
|
|
252
|
+
|
data/docs/LSP.md
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# LSP Server Integration
|
|
2
|
+
|
|
3
|
+
FakeDataDSL includes a full Language Server Protocol (LSP) server for IDE integration.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Go to Definition** - Jump to schema definitions from `Ref(User.id)` references
|
|
8
|
+
- **Real-time Diagnostics** - See errors as you type with line/column numbers
|
|
9
|
+
- **Auto-completion** - Suggestions for types, behaviors, and schemas
|
|
10
|
+
- **Hover Documentation** - See type and behavior documentation on hover
|
|
11
|
+
|
|
12
|
+
## Quick Start
|
|
13
|
+
|
|
14
|
+
### 1. Start the LSP Server
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
fake_data_dsl lsp
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The server will run on stdin/stdout, communicating via JSON-RPC.
|
|
21
|
+
|
|
22
|
+
### 2. Configure Your IDE
|
|
23
|
+
|
|
24
|
+
#### VS Code / Cursor
|
|
25
|
+
|
|
26
|
+
Create `.vscode/settings.json`:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"fakeDataDSL.lsp.enabled": true,
|
|
31
|
+
"fakeDataDSL.lsp.command": "fake_data_dsl",
|
|
32
|
+
"fakeDataDSL.lsp.args": ["lsp"]
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
#### Neovim
|
|
37
|
+
|
|
38
|
+
Add to your Neovim config:
|
|
39
|
+
|
|
40
|
+
```lua
|
|
41
|
+
require('lspconfig').fake_data_dsl.setup({
|
|
42
|
+
cmd = { 'fake_data_dsl', 'lsp' },
|
|
43
|
+
filetypes = { 'fakedatadsl', 'dsl' },
|
|
44
|
+
root_dir = require('lspconfig.util').root_pattern('.git', 'schemas'),
|
|
45
|
+
})
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Supported LSP Features
|
|
49
|
+
|
|
50
|
+
### textDocument/definition
|
|
51
|
+
|
|
52
|
+
Jump to schema definitions:
|
|
53
|
+
|
|
54
|
+
```dsl
|
|
55
|
+
Order:
|
|
56
|
+
user_id: Ref(User.id) # Ctrl+Click to jump to User schema
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### textDocument/hover
|
|
60
|
+
|
|
61
|
+
Hover over types and behaviors to see documentation:
|
|
62
|
+
|
|
63
|
+
```dsl
|
|
64
|
+
User:
|
|
65
|
+
id: uuid # Hover to see UUID type docs
|
|
66
|
+
@latency 100ms # Hover to see latency behavior docs
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### textDocument/completion
|
|
70
|
+
|
|
71
|
+
Auto-complete suggestions:
|
|
72
|
+
|
|
73
|
+
- Types: `uuid`, `name`, `email`, etc.
|
|
74
|
+
- Behaviors: `@latency`, `@failure`, `@partial_data`, etc.
|
|
75
|
+
- Schemas: `User`, `Order`, `Product`, etc.
|
|
76
|
+
|
|
77
|
+
### textDocument/diagnostic
|
|
78
|
+
|
|
79
|
+
Real-time error reporting:
|
|
80
|
+
|
|
81
|
+
- Parse errors with line/column numbers
|
|
82
|
+
- Path validation errors for `copy()` references
|
|
83
|
+
- Cycle detection for circular schema references
|
|
84
|
+
- Field order validation errors
|
|
85
|
+
|
|
86
|
+
## Architecture
|
|
87
|
+
|
|
88
|
+
The LSP server reuses existing FakeDataDSL components:
|
|
89
|
+
|
|
90
|
+
- **Parser** - For syntax validation and AST generation
|
|
91
|
+
- **Validator** - For semantic validation (paths, cycles)
|
|
92
|
+
- **Registry** - For schema lookup and cross-references
|
|
93
|
+
|
|
94
|
+
No code duplication - the LSP server is a thin wrapper around existing functionality.
|
|
95
|
+
|
|
96
|
+
## Troubleshooting
|
|
97
|
+
|
|
98
|
+
### Server Not Starting
|
|
99
|
+
|
|
100
|
+
Check that `fake_data_dsl` is in your PATH:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
which fake_data_dsl
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### No Diagnostics Appearing
|
|
107
|
+
|
|
108
|
+
Ensure your `.dsl` files are recognized:
|
|
109
|
+
|
|
110
|
+
1. Check file extension (`.dsl` or `.fdsl`)
|
|
111
|
+
2. Verify language mode is set to "FakeDataDSL"
|
|
112
|
+
3. Check LSP server logs for errors
|
|
113
|
+
|
|
114
|
+
### Completion Not Working
|
|
115
|
+
|
|
116
|
+
The LSP server needs schemas loaded to provide completion:
|
|
117
|
+
|
|
118
|
+
1. Open a `.dsl` file with schema definitions
|
|
119
|
+
2. Use `load` command in REPL to load schemas
|
|
120
|
+
3. Completion will work for loaded schemas
|
|
121
|
+
|
|
122
|
+
## API Reference
|
|
123
|
+
|
|
124
|
+
### Server Class
|
|
125
|
+
|
|
126
|
+
```ruby
|
|
127
|
+
server = FakeDataDSL::LSP::Server.new(input: $stdin, output: $stdout)
|
|
128
|
+
server.run
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Supported Methods
|
|
132
|
+
|
|
133
|
+
- `initialize` - Initialize LSP server
|
|
134
|
+
- `textDocument/didOpen` - Document opened
|
|
135
|
+
- `textDocument/didChange` - Document changed
|
|
136
|
+
- `textDocument/didClose` - Document closed
|
|
137
|
+
- `textDocument/definition` - Go to definition
|
|
138
|
+
- `textDocument/hover` - Hover information
|
|
139
|
+
- `textDocument/completion` - Completion suggestions
|
|
140
|
+
- `textDocument/diagnostic` - Validation diagnostics
|
|
141
|
+
- `shutdown` - Shutdown server
|
|
142
|
+
- `exit` - Exit server
|
|
143
|
+
|
|
144
|
+
## Examples
|
|
145
|
+
|
|
146
|
+
### Basic Setup
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Terminal 1: Start LSP server
|
|
150
|
+
fake_data_dsl lsp
|
|
151
|
+
|
|
152
|
+
# Terminal 2: Connect IDE to server
|
|
153
|
+
# (IDE handles connection automatically)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Custom Configuration
|
|
157
|
+
|
|
158
|
+
```ruby
|
|
159
|
+
# Custom LSP server with logging
|
|
160
|
+
require 'fake_data_dsl/lsp/server'
|
|
161
|
+
|
|
162
|
+
input = File.open('lsp_input.log', 'w')
|
|
163
|
+
output = File.open('lsp_output.log', 'w')
|
|
164
|
+
|
|
165
|
+
server = FakeDataDSL::LSP::Server.new(input: input, output: output)
|
|
166
|
+
server.run
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Performance
|
|
170
|
+
|
|
171
|
+
The LSP server is lightweight:
|
|
172
|
+
|
|
173
|
+
- **Memory**: ~10MB baseline
|
|
174
|
+
- **CPU**: Minimal (only validates on change)
|
|
175
|
+
- **Latency**: <10ms for most operations
|
|
176
|
+
|
|
177
|
+
## Limitations
|
|
178
|
+
|
|
179
|
+
- Currently single-file workspace (multi-file support planned)
|
|
180
|
+
- No incremental parsing (full parse on each change)
|
|
181
|
+
- No semantic tokens (syntax highlighting only)
|
|
182
|
+
|
|
183
|
+
## Future Enhancements
|
|
184
|
+
|
|
185
|
+
- Multi-file workspace support
|
|
186
|
+
- Incremental parsing
|
|
187
|
+
- Semantic tokens for better highlighting
|
|
188
|
+
- Code actions (quick fixes)
|
|
189
|
+
- Rename refactoring
|