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,246 @@
1
+ # FakeDataDSL for VS Code
2
+
3
+ Syntax highlighting and snippets for FakeDataDSL schema files.
4
+
5
+ ## Features
6
+
7
+ - 🎨 **Syntax Highlighting** - Full syntax highlighting for `.dsl` and `.fdsl` files
8
+ - ✨ **Snippets** - Quick templates for common schema patterns
9
+ - 📝 **Comments** - Support for `#` line comments
10
+ - 🔧 **Auto-formatting** - Smart indentation for schemas
11
+
12
+ ## Installation
13
+
14
+ ### From VS Code Marketplace
15
+
16
+ 1. Open VS Code
17
+ 2. Press `Ctrl+P` / `Cmd+P`
18
+ 3. Type `ext install fakedatadsl.fake-data-dsl`
19
+ 4. Press Enter
20
+
21
+ ### Manual Installation (Local Development)
22
+
23
+ #### For VS Code:
24
+
25
+ ```bash
26
+ # Copy extension to VS Code extensions folder
27
+ mkdir -p ~/.vscode/extensions/fakedatadsl.fake-data-dsl-1.0.0
28
+ cp -r /path/to/fake_data_dsl/vscode-extension/* ~/.vscode/extensions/fakedatadsl.fake-data-dsl-1.0.0/
29
+
30
+ # Restart VS Code
31
+ ```
32
+
33
+ #### For Cursor:
34
+
35
+ ```bash
36
+ # Copy extension to Cursor extensions folder
37
+ mkdir -p ~/.cursor/extensions/fakedatadsl.fake-data-dsl-1.0.0
38
+ cp -r /path/to/fake_data_dsl/vscode-extension/* ~/.cursor/extensions/fakedatadsl.fake-data-dsl-1.0.0/
39
+
40
+ # Restart Cursor
41
+ ```
42
+
43
+ ## ✅ Verifying Installation
44
+
45
+ After installation, verify the extension is working:
46
+
47
+ ### Step 1: Check Extension is Loaded
48
+
49
+ 1. Open VS Code/Cursor
50
+ 2. Press `Cmd+Shift+P` (Mac) or `Ctrl+Shift+P` (Windows/Linux)
51
+ 3. Type "Extensions: Show Installed Extensions"
52
+ 4. Search for "FakeDataDSL" - it should appear in the list
53
+
54
+ ### Step 2: Check Language Detection
55
+
56
+ 1. Create or open a `.dsl` file
57
+ 2. Look at the bottom-right status bar
58
+ 3. It should show "FakeDataDSL" as the language (not "Plain Text")
59
+
60
+ ### Step 3: Test Syntax Highlighting
61
+
62
+ Create a test file `test.dsl` with:
63
+
64
+ ```dsl
65
+ User:
66
+ id: uuid
67
+ name: full_name
68
+ email: email
69
+ ```
70
+
71
+ You should see:
72
+ - `User` highlighted as a schema name
73
+ - `id`, `name`, `email` highlighted as field names
74
+ - `uuid`, `full_name`, `email` highlighted as types
75
+
76
+ ### Step 4: Test Snippets
77
+
78
+ 1. Open a `.dsl` file
79
+ 2. Type `schema` and press Tab
80
+ 3. A template should expand
81
+
82
+ ## Troubleshooting
83
+
84
+ ### Extension Not Loading
85
+
86
+ **Symptoms**: `.dsl` files show as "Plain Text", no syntax highlighting
87
+
88
+ **Solutions**:
89
+
90
+ 1. **Restart the editor**:
91
+ - Completely quit VS Code/Cursor (Cmd+Q on Mac)
92
+ - Reopen the editor
93
+
94
+ 2. **Reload the window**:
95
+ - Press `Cmd+Shift+P`
96
+ - Type "Developer: Reload Window"
97
+ - Press Enter
98
+
99
+ 3. **Check extension folder structure**:
100
+ ```bash
101
+ # For VS Code
102
+ ls ~/.vscode/extensions/fakedatadsl.fake-data-dsl-1.0.0/
103
+
104
+ # For Cursor
105
+ ls ~/.cursor/extensions/fakedatadsl.fake-data-dsl-1.0.0/
106
+ ```
107
+
108
+ You should see:
109
+ ```
110
+ package.json
111
+ language-configuration.json
112
+ syntaxes/
113
+ snippets/
114
+ ```
115
+
116
+ 4. **Verify package.json is valid**:
117
+ ```bash
118
+ cat ~/.vscode/extensions/fakedatadsl.fake-data-dsl-1.0.0/package.json | python3 -m json.tool
119
+ ```
120
+
121
+ ### Language Not Auto-Detected
122
+
123
+ **Symptoms**: File opens but shows "Plain Text" instead of "FakeDataDSL"
124
+
125
+ **Solutions**:
126
+
127
+ 1. **Manually set language**:
128
+ - Click on "Plain Text" in the bottom-right status bar
129
+ - Search for "FakeDataDSL"
130
+ - Select it
131
+
132
+ 2. **Check file extension**:
133
+ - File must end with `.dsl` or `.fdsl`
134
+
135
+ 3. **Force file association**:
136
+ - Press `Cmd+Shift+P`
137
+ - Type "Change Language Mode"
138
+ - Select "Configure File Association for '.dsl'"
139
+ - Choose "FakeDataDSL"
140
+
141
+ ### Snippets Not Working
142
+
143
+ **Symptoms**: Typing `schema` + Tab doesn't expand
144
+
145
+ **Solutions**:
146
+
147
+ 1. **Check language mode**: Must be "FakeDataDSL" not "Plain Text"
148
+
149
+ 2. **Check snippet settings**:
150
+ - Open Settings (`Cmd+,`)
151
+ - Search for "snippets"
152
+ - Ensure "Editor: Snippet Suggestions" is not "none"
153
+
154
+ 3. **Manual snippet test**:
155
+ - Press `Cmd+Shift+P`
156
+ - Type "Insert Snippet"
157
+ - Search for "schema"
158
+
159
+ ## Syntax Highlighting
160
+
161
+ The extension provides highlighting for:
162
+
163
+ - **Schema names** - Capitalized class names (PascalCase)
164
+ - **Field names** - Lowercase with underscores (snake_case)
165
+ - **Types** - Built-in and custom types
166
+ - **Annotations** - `@version`, `@deprecated`, `@latency`, etc.
167
+ - **Strings** - Double-quoted values
168
+ - **Numbers** - Including ranges (`1..100`) and percentages (`80%`)
169
+ - **Comments** - Lines starting with `#`
170
+ - **Keywords** - `if`, `true`, `false`, `Ref`
171
+
172
+ ## Snippets Reference
173
+
174
+ | Prefix | Description | Example |
175
+ |--------|-------------|---------|
176
+ | `schema` | Basic schema | `SchemaName:` with fields |
177
+ | `schemav` | Schema with version | Includes `@version` |
178
+ | `user` | User schema template | Complete user with common fields |
179
+ | `apiresponse` | API response with behaviors | Includes `@latency`, `@failure` |
180
+ | `fuuid` | UUID field | `id: uuid` |
181
+ | `ftext` | Text field with range | `name: text(5..50)` |
182
+ | `fnumber` | Number field with range | `age: number(18..65)` |
183
+ | `femail` | Email field | `email: email` |
184
+ | `fbool` | Boolean with probability | `active: boolean(true:80%)` |
185
+ | `fenum` | Enum field | `status: enum(a, b, c)` |
186
+ | `fconst` | Constant value | `type: const("value")` |
187
+ | `farray` | Array field | `items: array(Item, 1..5)` |
188
+ | `fcopy` | Copy field value | `user_id: copy("user.id")` |
189
+ | `fshared` | Shared across batch | `recipient: shared(User)` |
190
+ | `fmapby` | Map by field | `users: map_by_field(...)` |
191
+ | `fref` | Schema reference | `user_id: Ref(User.id)` |
192
+ | `foneof` | Polymorphic field | `payload: one_of(A, B)` |
193
+ | `fopt` | Optional field | `phone?: phone` |
194
+ | `fnull` | Nullable field | `bio: text?` |
195
+ | `fif` | Conditional field | `tracking: text if shipped` |
196
+ | `blatency` | Latency behavior | `@latency 100..500ms` |
197
+ | `bfailure` | Failure behavior | `@failure 5%` |
198
+ | `bversion` | Version annotation | `@version 1.0` |
199
+ | `bdeprecated` | Deprecated annotation | `@deprecated Use X instead` |
200
+ | `twitterdm` | Full Twitter DM template | Complete webhook schema |
201
+
202
+ ## Example
203
+
204
+ ```dsl
205
+ # User schema for authentication system
206
+ User:
207
+ @version 2.0
208
+
209
+ id: uuid(unique: true)
210
+ name: full_name
211
+ email: email
212
+ age: number(18..65)
213
+ active: boolean(true:80%)
214
+ role: enum(user, admin:10%, moderator:15%)
215
+ created_at: past_date(1y)
216
+ profile?: UserProfile
217
+
218
+ UserProfile:
219
+ bio?: text(20..200)
220
+ avatar_url?: url
221
+ website?: url
222
+ ```
223
+
224
+ ## Requirements
225
+
226
+ - VS Code 1.60.0 or higher (or Cursor)
227
+
228
+ ## Release Notes
229
+
230
+ ### 1.0.0
231
+
232
+ - Initial release
233
+ - Full syntax highlighting for DSL constructs
234
+ - 30+ snippets for common patterns
235
+ - Comment support
236
+ - Smart bracket matching
237
+ - Auto-indentation
238
+
239
+ ## Contributing
240
+
241
+ Found a bug or want to add a feature?
242
+ Visit [GitHub](https://github.com/talaatmagdyx/fake_data_dsl)
243
+
244
+ ## License
245
+
246
+ MIT
@@ -0,0 +1,31 @@
1
+ {
2
+ "comments": {
3
+ "lineComment": "#"
4
+ },
5
+ "brackets": [
6
+ ["(", ")"],
7
+ ["[", "]"]
8
+ ],
9
+ "autoClosingPairs": [
10
+ { "open": "(", "close": ")" },
11
+ { "open": "[", "close": "]" },
12
+ { "open": "\"", "close": "\"", "notIn": ["string", "comment"] }
13
+ ],
14
+ "surroundingPairs": [
15
+ ["(", ")"],
16
+ ["[", "]"],
17
+ ["\"", "\""]
18
+ ],
19
+ "indentationRules": {
20
+ "increaseIndentPattern": "^\\s*\\w+:\\s*$",
21
+ "decreaseIndentPattern": "^\\s*$"
22
+ },
23
+ "folding": {
24
+ "markers": {
25
+ "start": "^\\s*\\w+:\\s*$",
26
+ "end": "^(?=\\S)"
27
+ }
28
+ },
29
+ "wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)"
30
+ }
31
+
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "fake-data-dsl",
3
+ "displayName": "FakeDataDSL",
4
+ "description": "Syntax highlighting and snippets for FakeDataDSL schema files",
5
+ "version": "1.0.0",
6
+ "publisher": "fakedatadsl",
7
+ "engines": {
8
+ "vscode": "^1.60.0"
9
+ },
10
+ "categories": [
11
+ "Programming Languages",
12
+ "Snippets"
13
+ ],
14
+ "keywords": [
15
+ "fake data",
16
+ "dsl",
17
+ "schema",
18
+ "testing",
19
+ "mock data"
20
+ ],
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/talaatmagdyx/fake_data_dsl"
24
+ },
25
+ "contributes": {
26
+ "languages": [
27
+ {
28
+ "id": "fakedatadsl",
29
+ "aliases": [
30
+ "FakeDataDSL",
31
+ "fakedatadsl"
32
+ ],
33
+ "extensions": [
34
+ ".dsl",
35
+ ".fdsl"
36
+ ],
37
+ "configuration": "./language-configuration.json"
38
+ }
39
+ ],
40
+ "grammars": [
41
+ {
42
+ "language": "fakedatadsl",
43
+ "scopeName": "source.fakedatadsl",
44
+ "path": "./syntaxes/fakedatadsl.tmLanguage.json"
45
+ }
46
+ ],
47
+ "snippets": [
48
+ {
49
+ "language": "fakedatadsl",
50
+ "path": "./snippets/fakedatadsl.json"
51
+ }
52
+ ]
53
+ }
54
+ }
55
+
@@ -0,0 +1,198 @@
1
+ {
2
+ "Schema": {
3
+ "prefix": "schema",
4
+ "body": [
5
+ "${1:SchemaName}:",
6
+ " ${2:field}: ${3:type}",
7
+ "$0"
8
+ ],
9
+ "description": "Create a new schema"
10
+ },
11
+ "Schema with Version": {
12
+ "prefix": "schemav",
13
+ "body": [
14
+ "${1:SchemaName}:",
15
+ " @version ${2:1.0}",
16
+ " ",
17
+ " ${3:field}: ${4:type}",
18
+ "$0"
19
+ ],
20
+ "description": "Create a versioned schema"
21
+ },
22
+ "User Schema": {
23
+ "prefix": "user",
24
+ "body": [
25
+ "User:",
26
+ " id: uuid",
27
+ " name: full_name",
28
+ " email: email",
29
+ " created_at: past_date(1y)",
30
+ "$0"
31
+ ],
32
+ "description": "Common user schema template"
33
+ },
34
+ "API Response": {
35
+ "prefix": "apiresponse",
36
+ "body": [
37
+ "APIResponse:",
38
+ " @latency 50..200ms",
39
+ " @failure 2%",
40
+ " ",
41
+ " success: boolean(true:95%)",
42
+ " data: ${1:DataSchema}",
43
+ " timestamp: now",
44
+ "$0"
45
+ ],
46
+ "description": "API response with behaviors"
47
+ },
48
+ "Field - UUID": {
49
+ "prefix": "fuuid",
50
+ "body": "${1:id}: uuid",
51
+ "description": "UUID field"
52
+ },
53
+ "Field - Text": {
54
+ "prefix": "ftext",
55
+ "body": "${1:name}: text(${2:5}..${3:50})",
56
+ "description": "Text field with length range"
57
+ },
58
+ "Field - Number": {
59
+ "prefix": "fnumber",
60
+ "body": "${1:count}: number(${2:1}..${3:100})",
61
+ "description": "Number field with range"
62
+ },
63
+ "Field - Email": {
64
+ "prefix": "femail",
65
+ "body": "${1:email}: email",
66
+ "description": "Email field"
67
+ },
68
+ "Field - Boolean": {
69
+ "prefix": "fbool",
70
+ "body": "${1:active}: boolean(${2:true}:${3:80}%)",
71
+ "description": "Boolean field with probability"
72
+ },
73
+ "Field - Enum": {
74
+ "prefix": "fenum",
75
+ "body": "${1:status}: enum(${2:pending}, ${3:active}, ${4:completed})",
76
+ "description": "Enum field"
77
+ },
78
+ "Field - Const": {
79
+ "prefix": "fconst",
80
+ "body": "${1:type}: const(\"${2:value}\")",
81
+ "description": "Constant field"
82
+ },
83
+ "Field - Array": {
84
+ "prefix": "farray",
85
+ "body": "${1:items}: array(${2:Item}, ${3:1}..${4:5})",
86
+ "description": "Array field"
87
+ },
88
+ "Field - Copy": {
89
+ "prefix": "fcopy",
90
+ "body": "${1:user_id}: copy(\"${2:user.id}\")",
91
+ "description": "Copy field value"
92
+ },
93
+ "Field - Shared": {
94
+ "prefix": "fshared",
95
+ "body": "${1:recipient}: shared(${2:User})",
96
+ "description": "Shared value across batch"
97
+ },
98
+ "Field - Map By Field": {
99
+ "prefix": "fmapby",
100
+ "body": "${1:users}: map_by_field(\"${2:id}\", ${3:sender}: ${4:User}, ${5:recipient}: ${6:User})",
101
+ "description": "Map with dynamic keys"
102
+ },
103
+ "Field - Reference": {
104
+ "prefix": "fref",
105
+ "body": "${1:user_id}: Ref(${2:User}.${3:id})",
106
+ "description": "Reference to another schema"
107
+ },
108
+ "Field - One Of": {
109
+ "prefix": "foneof",
110
+ "body": "${1:payload}: one_of(${2:TypeA}, ${3:TypeB}, ${4:TypeC})",
111
+ "description": "Polymorphic field"
112
+ },
113
+ "Field - Optional": {
114
+ "prefix": "fopt",
115
+ "body": "${1:phone}?: ${2:phone}",
116
+ "description": "Optional field"
117
+ },
118
+ "Field - Nullable": {
119
+ "prefix": "fnull",
120
+ "body": "${1:nickname}: ${2:text}?",
121
+ "description": "Nullable field"
122
+ },
123
+ "Field - Conditional": {
124
+ "prefix": "fif",
125
+ "body": "${1:tracking}: ${2:text} if ${3:shipped}",
126
+ "description": "Conditional field"
127
+ },
128
+ "Behavior - Latency": {
129
+ "prefix": "blatency",
130
+ "body": "@latency ${1:100}..${2:500}ms",
131
+ "description": "Add latency behavior"
132
+ },
133
+ "Behavior - Failure": {
134
+ "prefix": "bfailure",
135
+ "body": "@failure ${1:5}%",
136
+ "description": "Add failure behavior"
137
+ },
138
+ "Behavior - Partial Data": {
139
+ "prefix": "bpartial",
140
+ "body": "@partial_data ${1:10}%",
141
+ "description": "Add partial data behavior"
142
+ },
143
+ "Behavior - Version": {
144
+ "prefix": "bversion",
145
+ "body": "@version ${1:1.0}",
146
+ "description": "Set schema version"
147
+ },
148
+ "Behavior - Deprecated": {
149
+ "prefix": "bdeprecated",
150
+ "body": "@deprecated ${1:Use NewSchema instead}",
151
+ "description": "Mark schema as deprecated"
152
+ },
153
+ "Twitter DM Webhook": {
154
+ "prefix": "twitterdm",
155
+ "body": [
156
+ "TwitterDMWebhook:",
157
+ " eventName: const(\"new_twitter_direct_message\")",
158
+ " eventData: EventData",
159
+ "",
160
+ "EventData:",
161
+ " users: map_by_field(\"id\", sender: TwitterUser, recipient: shared(TwitterUser))",
162
+ " for_user_id: copy(\"users.recipient.id\")",
163
+ " direct_message_events: array(DirectMessageEvent, 1..1)",
164
+ "",
165
+ "DirectMessageEvent:",
166
+ " type: const(\"message_create\")",
167
+ " id: snowflake_id",
168
+ " created_timestamp: unix_timestamp_ms",
169
+ " message_create: MessageCreate",
170
+ "",
171
+ "MessageCreate:",
172
+ " target: Target",
173
+ " sender_id: copy(\"users.sender.id\")",
174
+ " message_data: MessageData",
175
+ "",
176
+ "Target:",
177
+ " recipient_id: copy(\"users.recipient.id\")",
178
+ "",
179
+ "MessageData:",
180
+ " text: message_text",
181
+ " entities: Entities",
182
+ "",
183
+ "Entities:",
184
+ " hashtags: empty_array",
185
+ " symbols: empty_array",
186
+ " user_mentions: empty_array",
187
+ " urls: empty_array",
188
+ "",
189
+ "TwitterUser:",
190
+ " id: snowflake_id",
191
+ " name: full_name",
192
+ " screen_name: social_handle",
193
+ "$0"
194
+ ],
195
+ "description": "Complete Twitter DM webhook template"
196
+ }
197
+ }
198
+
@@ -0,0 +1,128 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
3
+ "name": "FakeDataDSL",
4
+ "scopeName": "source.fakedatadsl",
5
+ "patterns": [
6
+ { "include": "#comments" },
7
+ { "include": "#schema-definition" },
8
+ { "include": "#annotations" },
9
+ { "include": "#field-definition" }
10
+ ],
11
+ "repository": {
12
+ "comments": {
13
+ "name": "comment.line.number-sign.fakedatadsl",
14
+ "match": "#.*$"
15
+ },
16
+ "schema-definition": {
17
+ "name": "entity.name.class.fakedatadsl",
18
+ "match": "^([A-Z][a-zA-Z0-9_]*):",
19
+ "captures": {
20
+ "1": { "name": "entity.name.type.fakedatadsl" }
21
+ }
22
+ },
23
+ "annotations": {
24
+ "name": "meta.annotation.fakedatadsl",
25
+ "match": "(@)(version|deprecated|latency|failure|partial_data|close_connection|simulate_error|randomize_order|seed)\\s*(.*)?$",
26
+ "captures": {
27
+ "1": { "name": "punctuation.definition.annotation.fakedatadsl" },
28
+ "2": { "name": "storage.type.annotation.fakedatadsl" },
29
+ "3": { "name": "string.unquoted.annotation-value.fakedatadsl" }
30
+ }
31
+ },
32
+ "field-definition": {
33
+ "patterns": [
34
+ { "include": "#field-name" },
35
+ { "include": "#type-reference" },
36
+ { "include": "#builtin-types" },
37
+ { "include": "#special-types" },
38
+ { "include": "#strings" },
39
+ { "include": "#numbers" },
40
+ { "include": "#operators" },
41
+ { "include": "#keywords" }
42
+ ]
43
+ },
44
+ "field-name": {
45
+ "name": "variable.other.field.fakedatadsl",
46
+ "match": "^\\s+([a-z_][a-zA-Z0-9_]*)(\\??):(?!:)",
47
+ "captures": {
48
+ "1": { "name": "variable.other.field.fakedatadsl" },
49
+ "2": { "name": "keyword.operator.optional.fakedatadsl" }
50
+ }
51
+ },
52
+ "type-reference": {
53
+ "name": "entity.name.type.reference.fakedatadsl",
54
+ "match": ":\\s*([A-Z][a-zA-Z0-9_]*)(?:\\?)?(?:\\s|$)",
55
+ "captures": {
56
+ "1": { "name": "entity.name.type.fakedatadsl" }
57
+ }
58
+ },
59
+ "builtin-types": {
60
+ "name": "support.type.builtin.fakedatadsl",
61
+ "match": "\\b(uuid|ulid|id_sequence|snowflake_id|numeric_string_id|name|full_name|first_name|last_name|email|phone|username|avatar|text|paragraph|sentence|word|message_text|social_handle|hashtag_text|number|integer|float|latitude|longitude|money|boolean|date|past_date|future_date|timestamp|now|unix_timestamp_ms|address|city|country|country_code|postal_code|state|url|domain|ip|ipv4|ipv6|mac_address|user_agent|currency|currency_code|iban|credit_card|object|empty_array|indices_pair)\\b"
62
+ },
63
+ "special-types": {
64
+ "patterns": [
65
+ {
66
+ "name": "support.function.special.fakedatadsl",
67
+ "match": "\\b(array|enum|const|copy|shared|map_by_field|one_of|Ref|custom|formula|template)\\b"
68
+ }
69
+ ]
70
+ },
71
+ "strings": {
72
+ "name": "string.quoted.double.fakedatadsl",
73
+ "begin": "\"",
74
+ "end": "\"",
75
+ "patterns": [
76
+ {
77
+ "name": "constant.character.escape.fakedatadsl",
78
+ "match": "\\\\."
79
+ }
80
+ ]
81
+ },
82
+ "numbers": {
83
+ "patterns": [
84
+ {
85
+ "name": "constant.numeric.range.fakedatadsl",
86
+ "match": "\\b(\\d+)\\s*\\.\\.\\s*(\\d+)\\b"
87
+ },
88
+ {
89
+ "name": "constant.numeric.percentage.fakedatadsl",
90
+ "match": "\\b(\\d+)%\\b"
91
+ },
92
+ {
93
+ "name": "constant.numeric.fakedatadsl",
94
+ "match": "\\b\\d+(\\.\\d+)?\\b"
95
+ }
96
+ ]
97
+ },
98
+ "operators": {
99
+ "patterns": [
100
+ {
101
+ "name": "keyword.operator.range.fakedatadsl",
102
+ "match": "\\.\\."
103
+ },
104
+ {
105
+ "name": "keyword.operator.nullable.fakedatadsl",
106
+ "match": "\\?(?=\\s|$)"
107
+ }
108
+ ]
109
+ },
110
+ "keywords": {
111
+ "patterns": [
112
+ {
113
+ "name": "keyword.control.conditional.fakedatadsl",
114
+ "match": "\\bif\\b"
115
+ },
116
+ {
117
+ "name": "constant.language.boolean.fakedatadsl",
118
+ "match": "\\b(true|false)\\b"
119
+ },
120
+ {
121
+ "name": "keyword.other.unit.fakedatadsl",
122
+ "match": "\\b(ms|s|m|h|d|y)\\b"
123
+ }
124
+ ]
125
+ }
126
+ }
127
+ }
128
+