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,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
|
+
|