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.
Files changed (302) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +4 -0
  3. data/.rubocop.yml +40 -0
  4. data/.yardopts +18 -0
  5. data/ACCESS_DOCS.md +116 -0
  6. data/ADVANCED_FEATURES_SUMMARY.md +245 -0
  7. data/CHANGELOG.md +498 -0
  8. data/CODE_OF_CONDUCT.md +122 -0
  9. data/CONTRIBUTING.md +307 -0
  10. data/DOCUMENTATION.md +204 -0
  11. data/DOCUMENTATION_GUIDE.md +194 -0
  12. data/LICENSE +22 -0
  13. data/README.md +1458 -0
  14. data/Rakefile +128 -0
  15. data/benchmark/README.md +591 -0
  16. data/benchmark/batch_generation.rb +63 -0
  17. data/benchmark/engine_comparison.rb +295 -0
  18. data/benchmark/single_record.rb +108 -0
  19. data/benchmark/streaming.rb +74 -0
  20. data/docs/ACTIVERECORD_INFERENCE.md +524 -0
  21. data/docs/API_SERVER.md +278 -0
  22. data/docs/CONFIG_FILE.md +315 -0
  23. data/docs/DATA_CONTRACTS.md +312 -0
  24. data/docs/ENHANCED_REPL.md +304 -0
  25. data/docs/FACTORY_BOT.md +271 -0
  26. data/docs/GITHUB_ACTION.md +420 -0
  27. data/docs/GRAPHQL_EXPORT.md +303 -0
  28. data/docs/GRAPHQL_FEDERATION.md +651 -0
  29. data/docs/HOW_TO_GENERATE_DOCS.md +252 -0
  30. data/docs/LSP.md +189 -0
  31. data/docs/MIGRATION_GENERATOR.md +547 -0
  32. data/docs/MOCK_SERVER.md +280 -0
  33. data/docs/NATIVE_ENGINE.md +298 -0
  34. data/docs/OPENAPI_EXPORT.md +252 -0
  35. data/docs/PERFORMANCE_MODE.md +228 -0
  36. data/docs/PERSONAS.md +547 -0
  37. data/docs/PROPERTY_TESTING.md +284 -0
  38. data/docs/PROTOBUF_EXPORT.md +276 -0
  39. data/docs/QUALITY_METRICS.md +555 -0
  40. data/docs/QUICK_REFERENCE.md +88 -0
  41. data/docs/RAILS_ENGINE.md +404 -0
  42. data/docs/RAILS_INTEGRATION.md +454 -0
  43. data/docs/README.md +175 -0
  44. data/docs/REPL_QUICK_REFERENCE.md +149 -0
  45. data/docs/RUST_INTEGRATION_GUIDE.md +1376 -0
  46. data/docs/SCENARIOS.md +576 -0
  47. data/docs/SECURITY_TESTING.md +318 -0
  48. data/docs/SNAPSHOT_TESTING.md +308 -0
  49. data/docs/STRING_TEXT_TYPES_REFERENCE.md +512 -0
  50. data/docs/TERRAFORM_EXPORT.md +447 -0
  51. data/docs/TIME_TRAVEL.md +507 -0
  52. data/docs/USAGE_GUIDE.md +980 -0
  53. data/docs/WEBHOOK_SIMULATOR.md +579 -0
  54. data/docs/advanced_features.md +183 -0
  55. data/docs/api_reference.md +153 -0
  56. data/docs/behaviors.md +138 -0
  57. data/docs/best_practices.md +191 -0
  58. data/docs/dsl_reference.md +172 -0
  59. data/docs/examples.md +162 -0
  60. data/docs/generation_modes.md +125 -0
  61. data/docs/getting_started.md +92 -0
  62. data/docs/index.html +177 -0
  63. data/docs/strategic/CLOUD_REGISTRY_ARCHITECTURE.md +268 -0
  64. data/docs/strategic/SIMD_OPTIMIZATION_STRATEGY.md +153 -0
  65. data/docs/troubleshooting.md +215 -0
  66. data/docs/type_reference.md +224 -0
  67. data/examples/hostile_mode_demo.rb +64 -0
  68. data/exe/synthra +6 -0
  69. data/ext/synthra_native/Cargo.lock +972 -0
  70. data/ext/synthra_native/Cargo.toml +46 -0
  71. data/ext/synthra_native/extconf.rb +41 -0
  72. data/ext/synthra_native/src/generator.rs +397 -0
  73. data/ext/synthra_native/src/lib.rs +229 -0
  74. data/ext/synthra_native/src/types.rs +1485 -0
  75. data/lib/generators/synthra/install_generator.rb +86 -0
  76. data/lib/generators/synthra/templates/api_response.dsl +15 -0
  77. data/lib/generators/synthra/templates/fake_data.rake +116 -0
  78. data/lib/generators/synthra/templates/synthra.yml +31 -0
  79. data/lib/generators/synthra/templates/synthra_support.rb +19 -0
  80. data/lib/generators/synthra/templates/user.dsl +11 -0
  81. data/lib/synthra/activerecord_inference.rb +394 -0
  82. data/lib/synthra/api.rb +381 -0
  83. data/lib/synthra/api_server.rb +718 -0
  84. data/lib/synthra/behaviors/applicator.rb +165 -0
  85. data/lib/synthra/behaviors/base.rb +155 -0
  86. data/lib/synthra/behaviors/close_connection.rb +60 -0
  87. data/lib/synthra/behaviors/deprecated.rb +100 -0
  88. data/lib/synthra/behaviors/failure.rb +69 -0
  89. data/lib/synthra/behaviors/latency.rb +103 -0
  90. data/lib/synthra/behaviors/partial_data.rb +83 -0
  91. data/lib/synthra/behaviors/randomize_order.rb +74 -0
  92. data/lib/synthra/behaviors/registry.rb +238 -0
  93. data/lib/synthra/behaviors/simulate_error.rb +79 -0
  94. data/lib/synthra/cli/commands/base.rb +105 -0
  95. data/lib/synthra/cli/commands/diff.rb +227 -0
  96. data/lib/synthra/cli/commands/docs.rb +67 -0
  97. data/lib/synthra/cli/commands/export.rb +150 -0
  98. data/lib/synthra/cli/commands/generate.rb +72 -0
  99. data/lib/synthra/cli/commands/import.rb +80 -0
  100. data/lib/synthra/cli/commands/lint.rb +53 -0
  101. data/lib/synthra/cli/commands/live.rb +57 -0
  102. data/lib/synthra/cli/commands/seed.rb +99 -0
  103. data/lib/synthra/cli/commands/validate.rb +28 -0
  104. data/lib/synthra/cli.rb +2471 -0
  105. data/lib/synthra/config_file.rb +129 -0
  106. data/lib/synthra/configuration.rb +281 -0
  107. data/lib/synthra/contracts_registry.rb +408 -0
  108. data/lib/synthra/database_seeder.rb +268 -0
  109. data/lib/synthra/deterministic_ids.rb +218 -0
  110. data/lib/synthra/documentation_generator.rb +414 -0
  111. data/lib/synthra/engine.rb +251 -0
  112. data/lib/synthra/errors.rb +1169 -0
  113. data/lib/synthra/export/base.rb +85 -0
  114. data/lib/synthra/export/csv.rb +101 -0
  115. data/lib/synthra/export/graphql.rb +266 -0
  116. data/lib/synthra/export/graphql_federation.rb +377 -0
  117. data/lib/synthra/export/graphviz.rb +258 -0
  118. data/lib/synthra/export/javascript.rb +327 -0
  119. data/lib/synthra/export/json_data.rb +61 -0
  120. data/lib/synthra/export/json_schema.rb +290 -0
  121. data/lib/synthra/export/openapi.rb +514 -0
  122. data/lib/synthra/export/protobuf.rb +483 -0
  123. data/lib/synthra/export/python.rb +560 -0
  124. data/lib/synthra/export/sql.rb +381 -0
  125. data/lib/synthra/export/sql_insert.rb +152 -0
  126. data/lib/synthra/export/terraform.rb +501 -0
  127. data/lib/synthra/export/type_mapping.rb +389 -0
  128. data/lib/synthra/export/typescript.rb +300 -0
  129. data/lib/synthra/export/xml_data.rb +104 -0
  130. data/lib/synthra/export/yaml_data.rb +56 -0
  131. data/lib/synthra/export.rb +404 -0
  132. data/lib/synthra/factory_bot_integration.rb +157 -0
  133. data/lib/synthra/field.rb +440 -0
  134. data/lib/synthra/functions/registry.rb +104 -0
  135. data/lib/synthra/generator/context.rb +372 -0
  136. data/lib/synthra/generator/engine.rb +336 -0
  137. data/lib/synthra/generator/faker_adapter.rb +425 -0
  138. data/lib/synthra/generator/modes.rb +444 -0
  139. data/lib/synthra/generator/resolver.rb +256 -0
  140. data/lib/synthra/generator/rng.rb +273 -0
  141. data/lib/synthra/generator/streamer.rb +63 -0
  142. data/lib/synthra/generator/uniqueness.rb +118 -0
  143. data/lib/synthra/initializer.rb +97 -0
  144. data/lib/synthra/limits.rb +279 -0
  145. data/lib/synthra/live_preview.rb +518 -0
  146. data/lib/synthra/loader_config.rb +78 -0
  147. data/lib/synthra/lsp/server.rb +689 -0
  148. data/lib/synthra/migration_generator.rb +301 -0
  149. data/lib/synthra/mixin.rb +174 -0
  150. data/lib/synthra/mock_server.rb +458 -0
  151. data/lib/synthra/native_engine.rb +304 -0
  152. data/lib/synthra/openapi_importer.rb +228 -0
  153. data/lib/synthra/output/json_formatter.rb +40 -0
  154. data/lib/synthra/output/ndjson_formatter.rb +55 -0
  155. data/lib/synthra/parser/ast.rb +1287 -0
  156. data/lib/synthra/parser/lexer.rb +1152 -0
  157. data/lib/synthra/parser/parser.rb +1664 -0
  158. data/lib/synthra/parser/tokens.rb +461 -0
  159. data/lib/synthra/performance_mode.rb +364 -0
  160. data/lib/synthra/personas.rb +397 -0
  161. data/lib/synthra/property_testing.rb +172 -0
  162. data/lib/synthra/quality_metrics.rb +405 -0
  163. data/lib/synthra/rails_test_helper.rb +248 -0
  164. data/lib/synthra/registry.rb +533 -0
  165. data/lib/synthra/relationships.rb +193 -0
  166. data/lib/synthra/repl/enhanced_repl.rb +607 -0
  167. data/lib/synthra/repl/formatter.rb +191 -0
  168. data/lib/synthra/scenarios.rb +423 -0
  169. data/lib/synthra/schema.rb +605 -0
  170. data/lib/synthra/schema_inheritance.rb +104 -0
  171. data/lib/synthra/schema_versioning.rb +212 -0
  172. data/lib/synthra/snapshot_testing.rb +199 -0
  173. data/lib/synthra/time_travel.rb +338 -0
  174. data/lib/synthra/type_definitions.rb +274 -0
  175. data/lib/synthra/types/address_location/addresses.rb +125 -0
  176. data/lib/synthra/types/address_location/airports.rb +200 -0
  177. data/lib/synthra/types/address_location/banks_hospitals.rb +207 -0
  178. data/lib/synthra/types/address_location/locations.rb +406 -0
  179. data/lib/synthra/types/base.rb +48 -0
  180. data/lib/synthra/types/commerce_products/commerce.rb +119 -0
  181. data/lib/synthra/types/commerce_products/companies.rb +71 -0
  182. data/lib/synthra/types/commerce_products/construction.rb +126 -0
  183. data/lib/synthra/types/commerce_products/products.rb +205 -0
  184. data/lib/synthra/types/core/collections.rb +513 -0
  185. data/lib/synthra/types/core/defaults.rb +76 -0
  186. data/lib/synthra/types/core/enums.rb +102 -0
  187. data/lib/synthra/types/core/identifiers.rb +445 -0
  188. data/lib/synthra/types/core/primitives.rb +586 -0
  189. data/lib/synthra/types/core/references.rb +466 -0
  190. data/lib/synthra/types/core/sequences.rb +304 -0
  191. data/lib/synthra/types/crypto/crypto.rb +162 -0
  192. data/lib/synthra/types/date_time/dates.rb +387 -0
  193. data/lib/synthra/types/finance_banking/banking.rb +424 -0
  194. data/lib/synthra/types/finance_banking/credit_cards.rb +24 -0
  195. data/lib/synthra/types/finance_banking/identifiers.rb +93 -0
  196. data/lib/synthra/types/formula.rb +184 -0
  197. data/lib/synthra/types/health_medical/medical.rb +150 -0
  198. data/lib/synthra/types/hostile_payloads.rb +122 -0
  199. data/lib/synthra/types/json_array.rb +51 -0
  200. data/lib/synthra/types/media_entertainment/media.rb +62 -0
  201. data/lib/synthra/types/naughty_string.rb +30 -0
  202. data/lib/synthra/types/personal_names/chinese.rb +41 -0
  203. data/lib/synthra/types/personal_names/identifiers.rb +187 -0
  204. data/lib/synthra/types/personal_names/names.rb +246 -0
  205. data/lib/synthra/types/personal_names/national_id.rb +89 -0
  206. data/lib/synthra/types/personal_names/titles_suffixes.rb +41 -0
  207. data/lib/synthra/types/regex.rb +248 -0
  208. data/lib/synthra/types/registry.rb +182 -0
  209. data/lib/synthra/types/repeating_element.rb +50 -0
  210. data/lib/synthra/types/scenario.rb +29 -0
  211. data/lib/synthra/types/technology_internet/apps.rb +67 -0
  212. data/lib/synthra/types/technology_internet/communication.rb +162 -0
  213. data/lib/synthra/types/technology_internet/devices.rb +80 -0
  214. data/lib/synthra/types/technology_internet/formats.rb +139 -0
  215. data/lib/synthra/types/technology_internet/networking.rb +143 -0
  216. data/lib/synthra/types/template.rb +92 -0
  217. data/lib/synthra/types/text_content/business.rb +128 -0
  218. data/lib/synthra/types/text_content/colors.rb +70 -0
  219. data/lib/synthra/types/text_content/misc.rb +237 -0
  220. data/lib/synthra/types/text_content/security.rb +130 -0
  221. data/lib/synthra/types/text_content/text_generation.rb +532 -0
  222. data/lib/synthra/types/travel/travel.rb +150 -0
  223. data/lib/synthra/utils/string_distance.rb +133 -0
  224. data/lib/synthra/validator/dsl_validator.rb +339 -0
  225. data/lib/synthra/validator/path_validator.rb +615 -0
  226. data/lib/synthra/version.rb +35 -0
  227. data/lib/synthra/webhook_simulator.rb +341 -0
  228. data/lib/synthra.rb +259 -0
  229. data/schemas/address.dsl +16 -0
  230. data/schemas/api_response.dsl +8 -0
  231. data/schemas/error_payload.dsl +9 -0
  232. data/schemas/order.dsl +10 -0
  233. data/schemas/order_item.dsl +8 -0
  234. data/schemas/payment.dsl +11 -0
  235. data/schemas/social_post.dsl +13 -0
  236. data/schemas/user.dsl +10 -0
  237. data/scripts/batch_fix_all.rb +96 -0
  238. data/scripts/delete_old_files.rb +32 -0
  239. data/scripts/fix_all_grouped_files.rb +137 -0
  240. data/scripts/fix_all_indentation.rb +48 -0
  241. data/scripts/fix_all_syntax.rb +124 -0
  242. data/scripts/fix_grouped_files.rb +184 -0
  243. data/scripts/fix_syntax_errors.rb +108 -0
  244. data/scripts/group_domain_types.rb +112 -0
  245. data/scripts/group_domain_types_fixed.rb +150 -0
  246. data/scripts/merge_domains_to_one_file.rb +68 -0
  247. data/scripts/move_existing_types.rb +130 -0
  248. data/scripts/split_grouped_types.rb +142 -0
  249. data/tech_docs/README.md +134 -0
  250. data/tech_docs/advanced/streaming.md +405 -0
  251. data/tech_docs/advanced/thread_safety.md +253 -0
  252. data/tech_docs/api/overview.md +485 -0
  253. data/tech_docs/appendices/type_chart.md +193 -0
  254. data/tech_docs/basic_concepts.md +383 -0
  255. data/tech_docs/behaviors/overview.md +346 -0
  256. data/tech_docs/dsl/complex_types.md +790 -0
  257. data/tech_docs/dsl/core_types.md +464 -0
  258. data/tech_docs/dsl/datetime_types.md +325 -0
  259. data/tech_docs/dsl/field_modifiers.md +414 -0
  260. data/tech_docs/dsl/grammar.md +431 -0
  261. data/tech_docs/dsl/schema_definition.md +399 -0
  262. data/tech_docs/export/README.md +276 -0
  263. data/tech_docs/installation.md +273 -0
  264. data/tech_docs/integration/ci_cd.md +707 -0
  265. data/tech_docs/integration/ci_cd_guide.md +579 -0
  266. data/tech_docs/integration/factory_bot.md +485 -0
  267. data/tech_docs/integration/rails.md +630 -0
  268. data/tech_docs/integration/rspec.md +449 -0
  269. data/tech_docs/modes/overview.md +350 -0
  270. data/tech_docs/performance/NATIVE_RUST_EXTENSION.md +1270 -0
  271. data/tech_docs/performance/OPTIMIZATION_GUIDE.md +901 -0
  272. data/tech_docs/quick_start.md +256 -0
  273. data/tech_docs/templates/README.md +805 -0
  274. data/tech_docs/tutorials/advanced.md +371 -0
  275. data/tech_docs/tutorials/getting_started.md +189 -0
  276. data/tech_docs/tutorials/intermediate.md +231 -0
  277. data/tech_docs/tutorials/template_gallery.md +569 -0
  278. data/tech_example/01_basic_usage.rb +238 -0
  279. data/tech_example/02_types_demo.rb +336 -0
  280. data/tech_example/04_cli_usage.md +429 -0
  281. data/tech_example/05_database_seeding.rb +283 -0
  282. data/tech_example/07_rspec_integration.rb +359 -0
  283. data/tech_example/10_custom_types.rb +387 -0
  284. data/tech_example/12_behaviors.rb +372 -0
  285. data/tech_example/13_twitter_dm_example.rb +120 -0
  286. data/tech_example/14_exact_json_structure.rb +253 -0
  287. data/tech_example/16_lsp_server.rb +56 -0
  288. data/tech_example/17_property_testing.rb +92 -0
  289. data/tech_example/18_enhanced_repl.rb +120 -0
  290. data/tech_example/19_security_fuzzing.rb +145 -0
  291. data/tech_example/NEW_FEATURES.md +169 -0
  292. data/tech_example/README.md +118 -0
  293. data/tech_example/schemas/api_response.dsl +123 -0
  294. data/tech_example/schemas/ecommerce.dsl +121 -0
  295. data/tech_example/schemas/twitter_dm.dsl +109 -0
  296. data/tech_example/schemas/user.dsl +36 -0
  297. data/vscode-extension/README.md +246 -0
  298. data/vscode-extension/language-configuration.json +31 -0
  299. data/vscode-extension/package.json +55 -0
  300. data/vscode-extension/snippets/fakedatadsl.json +198 -0
  301. data/vscode-extension/syntaxes/fakedatadsl.tmLanguage.json +128 -0
  302. 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