class-metrix 0.1.2 → 1.0.1

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +48 -0
  3. data/.vscode/README.md +128 -0
  4. data/.vscode/extensions.json +31 -0
  5. data/.vscode/keybindings.json +26 -0
  6. data/.vscode/launch.json +32 -0
  7. data/.vscode/rbs.code-snippets +61 -0
  8. data/.vscode/settings.json +112 -0
  9. data/.vscode/tasks.json +240 -0
  10. data/CHANGELOG.md +73 -4
  11. data/README.md +86 -22
  12. data/Steepfile +26 -0
  13. data/docs/ARCHITECTURE.md +501 -0
  14. data/docs/CHANGELOG_EVOLUTION_EXAMPLE.md +95 -0
  15. data/examples/README.md +161 -114
  16. data/examples/basic_usage.rb +88 -0
  17. data/examples/debug_levels_demo.rb +65 -0
  18. data/examples/debug_mode_demo.rb +75 -0
  19. data/examples/inheritance_and_modules.rb +155 -0
  20. data/lib/class_metrix/extractor.rb +106 -11
  21. data/lib/class_metrix/extractors/constants_extractor.rb +155 -21
  22. data/lib/class_metrix/extractors/methods_extractor.rb +186 -21
  23. data/lib/class_metrix/extractors/multi_type_extractor.rb +8 -7
  24. data/lib/class_metrix/formatters/base/base_formatter.rb +3 -3
  25. data/lib/class_metrix/formatters/components/footer_component.rb +4 -4
  26. data/lib/class_metrix/formatters/components/generic_header_component.rb +2 -2
  27. data/lib/class_metrix/formatters/components/header_component.rb +4 -4
  28. data/lib/class_metrix/formatters/components/missing_behaviors_component.rb +7 -7
  29. data/lib/class_metrix/formatters/components/table_component/column_width_calculator.rb +56 -0
  30. data/lib/class_metrix/formatters/components/table_component/row_processor.rb +141 -0
  31. data/lib/class_metrix/formatters/components/table_component/table_data_extractor.rb +57 -0
  32. data/lib/class_metrix/formatters/components/table_component/table_renderer.rb +55 -0
  33. data/lib/class_metrix/formatters/components/table_component.rb +32 -245
  34. data/lib/class_metrix/formatters/csv_formatter.rb +3 -3
  35. data/lib/class_metrix/formatters/markdown_formatter.rb +3 -4
  36. data/lib/class_metrix/formatters/shared/markdown_table_builder.rb +12 -7
  37. data/lib/class_metrix/formatters/shared/table_builder.rb +92 -27
  38. data/lib/class_metrix/formatters/shared/value_processor.rb +72 -16
  39. data/lib/class_metrix/utils/debug_logger.rb +159 -0
  40. data/lib/class_metrix/version.rb +1 -1
  41. data/sig/class_metrix.rbs +8 -0
  42. data/sig/extractor.rbs +54 -0
  43. data/sig/extractors.rbs +84 -0
  44. data/sig/formatters_base.rbs +59 -0
  45. data/sig/formatters_components.rbs +133 -0
  46. data/sig/formatters_main.rbs +20 -0
  47. data/sig/formatters_shared.rbs +102 -0
  48. data/sig/manifest.yaml +32 -0
  49. data/sig/utils.rbs +57 -0
  50. data/sig/value_processor.rbs +11 -0
  51. data/sig/version.rbs +4 -0
  52. metadata +60 -10
  53. data/examples/advanced/error_handling.rb +0 -199
  54. data/examples/advanced/hash_expansion.rb +0 -180
  55. data/examples/basic/01_simple_constants.rb +0 -56
  56. data/examples/basic/02_simple_methods.rb +0 -99
  57. data/examples/basic/03_multi_type_extraction.rb +0 -116
  58. data/examples/components/configurable_reports.rb +0 -201
  59. data/examples/csv_output_demo.rb +0 -237
  60. data/examples/real_world/microservices_audit.rb +0 -312
  61. data/sig/class/metrix.rbs +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f907803028cff5b1f0e8fcc21bd9e9b68d4dc496ba450dda0364337f5548c06a
4
- data.tar.gz: 1d02ce1725a8542e9a5e60a528c248838ff072743c4556c17878b68a7a5ae931
3
+ metadata.gz: 9b893eab40ee30c91bfb72059fcaffc282efca2088e4e150d2cf89c7fb0ff835
4
+ data.tar.gz: 553832b76ef1c44f6ace2cb7b37808dc2e18ef3c2f16882cc2aa951d1d9b82b3
5
5
  SHA512:
6
- metadata.gz: c7d44e8e2359f858fc349179539cb5d7d7cf831abb6da76f77eaec75e882efd4f3d9cb371f6070c34ab4048d9fb319ddf7621fadafc5a0cc0d00089c8f8881f2
7
- data.tar.gz: 349ccda98eec305973604160b6238c47b3c764f5f1935ca7d06bf63fcf4a8832b8d026e7810dff3504ac38eddf029f7ac45fdfe9b3fdfaa0f19bde7adbab449c
6
+ metadata.gz: 98297596048b427aa614a18ab3bb01cde37382b95df9b10dd2d9e2856db0afccdc420245e6b5f84ac676fa35bd7b6b68e8d945bf58f987526c39fde840d05a8f
7
+ data.tar.gz: dc3729ab21692725a5660b781c51c81282640640a3fae6d11328fb0485f30f4af4e30e71c74e987a3ad5709726878fb04713e349098bd4df0538468416b0099f
data/.editorconfig ADDED
@@ -0,0 +1,48 @@
1
+ # EditorConfig is awesome: https://EditorConfig.org
2
+
3
+ # top-most EditorConfig file
4
+ root = true
5
+
6
+ # All files
7
+ [*]
8
+ charset = utf-8
9
+ end_of_line = lf
10
+ insert_final_newline = true
11
+ trim_trailing_whitespace = true
12
+
13
+ # Ruby files
14
+ [*.rb]
15
+ indent_style = space
16
+ indent_size = 2
17
+ max_line_length = 140
18
+
19
+ # Gemfiles and other Ruby-related files
20
+ [{Gemfile,Rakefile,*.gemspec}]
21
+ indent_style = space
22
+ indent_size = 2
23
+
24
+ # YAML files
25
+ [*.{yml,yaml}]
26
+ indent_style = space
27
+ indent_size = 2
28
+
29
+ # Markdown files
30
+ [*.md]
31
+ indent_style = space
32
+ indent_size = 2
33
+ trim_trailing_whitespace = false
34
+
35
+ # JSON files
36
+ [*.json]
37
+ indent_style = space
38
+ indent_size = 2
39
+
40
+ # JavaScript/TypeScript files (if any)
41
+ [*.{js,ts}]
42
+ indent_style = space
43
+ indent_size = 2
44
+
45
+ # Shell scripts
46
+ [*.sh]
47
+ indent_style = space
48
+ indent_size = 2
data/.vscode/README.md ADDED
@@ -0,0 +1,128 @@
1
+ # VS Code Configuration for ClassMetrix
2
+
3
+ ## 🎯 Overview
4
+
5
+ This directory contains comprehensive VS Code configuration for the ClassMetrix Ruby gem development with full RBS (Ruby Signature) and Steep type checking integration.
6
+
7
+ ## 📦 Extensions
8
+
9
+ ### Required Extensions
10
+
11
+ - **Ruby LSP** (`shopify.ruby-lsp`) - Primary Ruby language support
12
+ - **RBS Syntax** (`soutaro.rbs-syntax`) - RBS file syntax highlighting
13
+ - **Steep VS Code** (`soutaro.steep-vscode`) - Type checking integration
14
+ - **RBS Snippets** (`mateuszdrewniak.rbs-snippets`) - Code snippets for RBS
15
+
16
+ ### Optional Extensions
17
+
18
+ - **Ruby Debugger** (`koichisasada.vscode-rdbg`) - Debugging support
19
+ - **GitLens** (`eamodio.gitlens`) - Enhanced Git integration
20
+ - **Markdown All in One** (`yzhang.markdown-all-in-one`) - Documentation support
21
+
22
+ ## ⚙️ Settings Configuration
23
+
24
+ ### Ruby Language Support
25
+
26
+ - **Format on Save**: Enabled with RuboCop
27
+ - **Ruby LSP**: Full feature set enabled
28
+ - **Semantic Highlighting**: Enabled for both Ruby and RBS files
29
+
30
+ ### RBS Type Checking
31
+
32
+ - **Steep Integration**: Real-time type checking
33
+ - **Diagnostics**: Enabled for immediate feedback
34
+ - **File Associations**: `.rbs` files properly recognized
35
+
36
+ ### Code Quality
37
+
38
+ - **RuboCop**: Integrated for code formatting and linting
39
+ - **Auto-fix on Save**: Automatic code corrections
40
+
41
+ ## 🛠️ Available Tasks
42
+
43
+ ### Ruby Development Tasks
44
+
45
+ - **`Ctrl+Shift+P` → "Tasks: Run Task"**
46
+
47
+ | Task | Description | Shortcut |
48
+ | --------------------------- | --------------------------- | ---------------------- |
49
+ | `Rubocop: Check` | Lint all Ruby files | - |
50
+ | `Rubocop: Fix` | Auto-fix all RuboCop issues | `Ctrl+Shift+R, Ctrl+R` |
51
+ | `Rubocop: Fix Current File` | Fix current file only | - |
52
+ | `RSpec: Run All Tests` | Run entire test suite | - |
53
+ | `RSpec: Run Current File` | Run tests for current file | - |
54
+
55
+ ### Type Checking Tasks
56
+
57
+ | Task | Description | Shortcut |
58
+ | -------------------------- | --------------------------- | ---------------------- |
59
+ | `RBS: Validate` | Validate RBS syntax | `Ctrl+Shift+R, Ctrl+V` |
60
+ | `RBS: Generate Prototypes` | Generate RBS from Ruby code | - |
61
+ | `Steep: Type Check` | Run type checking | `Ctrl+Shift+R, Ctrl+S` |
62
+ | `Steep: Watch Mode` | Continuous type checking | `Ctrl+Shift+R, Ctrl+W` |
63
+
64
+ ### Build Tasks
65
+
66
+ | Task | Description |
67
+ | ---------------- | ------------------------ |
68
+ | `Bundle Install` | Install gem dependencies |
69
+
70
+ ## ⌨️ Keyboard Shortcuts
71
+
72
+ ### Custom Shortcuts
73
+
74
+ - **`Ctrl+Shift+R, Ctrl+V`**: RBS Validate
75
+ - **`Ctrl+Shift+R, Ctrl+S`**: Steep Type Check
76
+ - **`Ctrl+Shift+R, Ctrl+W`**: Steep Watch Mode
77
+ - **`Ctrl+Shift+R, Ctrl+R`**: RuboCop Fix
78
+
79
+ ### Usage Pattern
80
+
81
+ 1. Press `Ctrl+Shift+R` to enter "Ruby mode"
82
+ 2. Press the second key for the specific action
83
+
84
+ ## 📝 Code Snippets
85
+
86
+ ### RBS Snippets
87
+
88
+ - **`rbsclass`**: Complete RBS class template
89
+ - **`rbsmodule`**: RBS module template
90
+ - **`rbsmethod`**: Method signature
91
+ - **`rbsattr_reader`**: Attribute reader
92
+ - **`rbsattr_writer`**: Attribute writer
93
+ - **`rbsattr_accessor`**: Attribute accessor
94
+
95
+ ### Usage
96
+
97
+ 1. Type snippet prefix in `.rbs` file
98
+ 2. Press `Tab` to expand
99
+ 3. Use `Tab` to navigate through placeholders
100
+
101
+ ## 🚀 Getting Started
102
+
103
+ ### 1. Install Extensions
104
+
105
+ VS Code will prompt to install recommended extensions when you open the workspace.
106
+
107
+ ### 2. Verify Setup
108
+
109
+ 1. Open any `.rb` file - should have Ruby LSP support
110
+ 2. Open any `.rbs` file - should have syntax highlighting
111
+ 3. Run `Ctrl+Shift+R, Ctrl+S` - should type check without errors
112
+
113
+ ### 3. Start Development
114
+
115
+ 1. Use `Ctrl+Shift+R, Ctrl+W` to start watch mode
116
+ 2. Edit Ruby files - see real-time type checking
117
+ 3. Use code snippets for rapid RBS development
118
+
119
+ ## 📊 Current Status
120
+
121
+ ✅ **Type Safety**: 100% (0 Steep errors)
122
+ ✅ **RBS Coverage**: Complete for all extractors
123
+ ✅ **VS Code Integration**: Fully configured
124
+ ✅ **Development Workflow**: Optimized
125
+
126
+ ---
127
+
128
+ This VS Code setup provides a complete Ruby development environment with modern type checking capabilities.
@@ -0,0 +1,31 @@
1
+ {
2
+ "recommendations": [
3
+ // Ruby language support
4
+ "shopify.ruby-lsp",
5
+
6
+ // RBS and Steep support (type checking)
7
+ "soutaro.rbs-syntax",
8
+ "soutaro.steep-vscode",
9
+ "mateuszdrewniak.rbs-snippets",
10
+
11
+ // Debugging support
12
+ "koichisasada.vscode-rdbg",
13
+
14
+ // Markdown support
15
+ "esbenp.prettier-vscode",
16
+ "yzhang.markdown-all-in-one",
17
+ "davidanson.vscode-markdownlint",
18
+
19
+ // General productivity
20
+ "ms-vscode.vscode-json",
21
+ "redhat.vscode-yaml",
22
+ "editorconfig.editorconfig",
23
+
24
+ // Git integration
25
+ "eamodio.gitlens",
26
+
27
+ // Additional helpful extensions
28
+ "ms-vscode.test-adapter-converter",
29
+ "hbenl.vscode-test-explorer"
30
+ ]
31
+ }
@@ -0,0 +1,26 @@
1
+ [
2
+ {
3
+ "key": "ctrl+shift+r ctrl+v",
4
+ "command": "workbench.action.tasks.runTask",
5
+ "args": "RBS: Validate",
6
+ "when": "editorTextFocus"
7
+ },
8
+ {
9
+ "key": "ctrl+shift+r ctrl+s",
10
+ "command": "workbench.action.tasks.runTask",
11
+ "args": "Steep: Type Check",
12
+ "when": "editorTextFocus"
13
+ },
14
+ {
15
+ "key": "ctrl+shift+r ctrl+w",
16
+ "command": "workbench.action.tasks.runTask",
17
+ "args": "Steep: Watch Mode",
18
+ "when": "editorTextFocus"
19
+ },
20
+ {
21
+ "key": "ctrl+shift+r ctrl+r",
22
+ "command": "workbench.action.tasks.runTask",
23
+ "args": "Rubocop: Fix",
24
+ "when": "editorTextFocus"
25
+ }
26
+ ]
@@ -0,0 +1,32 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Ruby: Run Current File",
6
+ "type": "ruby_lsp",
7
+ "request": "launch",
8
+ "program": "${file}"
9
+ },
10
+ {
11
+ "name": "Ruby: Run with Arguments",
12
+ "type": "ruby_lsp",
13
+ "request": "launch",
14
+ "program": "${file}",
15
+ "args": []
16
+ },
17
+ {
18
+ "name": "RSpec: Debug Current File",
19
+ "type": "ruby_lsp",
20
+ "request": "launch",
21
+ "program": "bundle",
22
+ "args": ["exec", "rspec", "${file}"]
23
+ },
24
+ {
25
+ "name": "RSpec: Debug All Tests",
26
+ "type": "ruby_lsp",
27
+ "request": "launch",
28
+ "program": "bundle",
29
+ "args": ["exec", "rspec"]
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "RBS Class Definition": {
3
+ "prefix": "rbsclass",
4
+ "body": [
5
+ "class ${1:ClassName}",
6
+ " ${2:# Instance variables}",
7
+ " ${3:@var}: ${4:Type}",
8
+ "",
9
+ " ${5:# Methods}",
10
+ " def initialize: (${6:params}) -> void",
11
+ " def ${7:method_name}: (${8:params}) -> ${9:ReturnType}",
12
+ "",
13
+ " private",
14
+ "",
15
+ " def ${10:private_method}: () -> ${11:ReturnType}",
16
+ "end"
17
+ ],
18
+ "description": "RBS class definition template"
19
+ },
20
+ "RBS Module Definition": {
21
+ "prefix": "rbsmodule",
22
+ "body": [
23
+ "module ${1:ModuleName}",
24
+ " ${2:# Module methods}",
25
+ " def self.${3:method_name}: (${4:params}) -> ${5:ReturnType}",
26
+ "",
27
+ " ${6:# Instance methods}",
28
+ " def ${7:method_name}: (${8:params}) -> ${9:ReturnType}",
29
+ "end"
30
+ ],
31
+ "description": "RBS module definition template"
32
+ },
33
+ "RBS Method Definition": {
34
+ "prefix": "rbsmethod",
35
+ "body": [
36
+ "def ${1:method_name}: (${2:params}) -> ${3:ReturnType}"
37
+ ],
38
+ "description": "RBS method definition"
39
+ },
40
+ "RBS Attribute Reader": {
41
+ "prefix": "rbsattr_reader",
42
+ "body": [
43
+ "attr_reader ${1:attribute}: ${2:Type}"
44
+ ],
45
+ "description": "RBS attribute reader"
46
+ },
47
+ "RBS Attribute Writer": {
48
+ "prefix": "rbsattr_writer",
49
+ "body": [
50
+ "attr_writer ${1:attribute}: ${2:Type}"
51
+ ],
52
+ "description": "RBS attribute writer"
53
+ },
54
+ "RBS Attribute Accessor": {
55
+ "prefix": "rbsattr_accessor",
56
+ "body": [
57
+ "attr_accessor ${1:attribute}: ${2:Type}"
58
+ ],
59
+ "description": "RBS attribute accessor"
60
+ }
61
+ }
@@ -0,0 +1,112 @@
1
+ {
2
+ // Ruby language settings
3
+ "ruby.format": "rubocop",
4
+ "ruby.lint": {
5
+ "rubocop": {
6
+ "useBundler": true
7
+ }
8
+ },
9
+ "ruby.useLanguageServer": true,
10
+ "ruby.intellisense": "rubyLsp",
11
+
12
+ // Auto-formatting settings
13
+ "editor.formatOnSave": true,
14
+ "editor.formatOnPaste": true,
15
+ "editor.formatOnType": false,
16
+ "editor.codeActionsOnSave": {
17
+ "source.fixAll.rubocop": "explicit"
18
+ },
19
+
20
+ // Language-specific formatting
21
+ "[ruby]": {
22
+ "editor.defaultFormatter": "Shopify.ruby-lsp",
23
+ "editor.formatOnSave": true,
24
+ "editor.tabSize": 2,
25
+ "editor.insertSpaces": true,
26
+ "editor.semanticHighlighting.enabled": true,
27
+ "editor.formatOnType": true,
28
+ "editor.rulers": [140],
29
+ "editor.trimAutoWhitespace": true
30
+ },
31
+ "[markdown]": {
32
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
33
+ "editor.formatOnSave": true,
34
+ "editor.tabSize": 2,
35
+ "editor.wordWrap": "on",
36
+ "editor.quickSuggestions": {
37
+ "comments": "off",
38
+ "strings": "off",
39
+ "other": "off"
40
+ }
41
+ },
42
+ "[rbs]": {
43
+ "editor.defaultFormatter": "soutaro.rbs-syntax",
44
+ "editor.formatOnSave": true,
45
+ "editor.tabSize": 2,
46
+ "editor.insertSpaces": true,
47
+ "editor.semanticHighlighting.enabled": true,
48
+ "editor.rulers": [120],
49
+ "editor.trimAutoWhitespace": true
50
+ },
51
+
52
+ // File associations
53
+ "files.associations": {
54
+ "*.gemspec": "ruby",
55
+ "Gemfile": "ruby",
56
+ "Rakefile": "ruby",
57
+ ".rubocop.yml": "yaml",
58
+ "*.rbs": "rbs",
59
+ "Steepfile": "ruby"
60
+ },
61
+
62
+ // Auto-save settings
63
+ "files.autoSave": "onFocusChange",
64
+ "files.trimTrailingWhitespace": true,
65
+ "files.insertFinalNewline": true,
66
+ "files.trimFinalNewlines": true,
67
+
68
+ // Ruby LSP specific settings
69
+ "rubyLsp.enabledFeatures": {
70
+ "codeActions": true,
71
+ "diagnostics": true,
72
+ "documentHighlights": true,
73
+ "documentLink": true,
74
+ "documentSymbols": true,
75
+ "foldingRanges": true,
76
+ "formatting": true,
77
+ "hover": true,
78
+ "inlayHint": true,
79
+ "onTypeFormatting": true,
80
+ "selectionRanges": true,
81
+ "semanticHighlighting": true,
82
+ "completion": true,
83
+ "codeLens": true,
84
+ "definition": true,
85
+ "workspaceSymbol": true,
86
+ "signatureHelp": true,
87
+ "typeHierarchy": true
88
+ },
89
+ "rubyLsp.formatter": "rubocop",
90
+
91
+ // Rubocop specific settings
92
+ "ruby.rubocop.configFilePath": ".rubocop.yml",
93
+ "ruby.rubocop.suppressRubocopWarnings": false,
94
+
95
+ // Steep type checker settings
96
+ "steep.enabled": true,
97
+ "steep.checkOnSave": true,
98
+ "steep.diagnosticsEnabled": true,
99
+ "steep.signatureHelp": true,
100
+ "steep.hover": true,
101
+
102
+ // RBS validation settings
103
+ "ruby.rbs": {
104
+ "enabled": true,
105
+ "diagnostics": true
106
+ },
107
+
108
+ // Additional helpful settings
109
+ "breadcrumbs.enabled": true,
110
+ "editor.minimap.enabled": true,
111
+ "workbench.editor.enablePreview": false
112
+ }
@@ -0,0 +1,240 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "label": "Rubocop: Check",
6
+ "type": "shell",
7
+ "command": "bundle",
8
+ "args": ["exec", "rubocop"],
9
+ "group": "test",
10
+ "presentation": {
11
+ "echo": true,
12
+ "reveal": "always",
13
+ "focus": false,
14
+ "panel": "shared"
15
+ },
16
+ "problemMatcher": [
17
+ {
18
+ "owner": "rubocop",
19
+ "fileLocation": "absolute",
20
+ "pattern": [
21
+ {
22
+ "regexp": "^([^:]+):(\\d+):(\\d+): ([A-Z]): (.*)$",
23
+ "file": 1,
24
+ "line": 2,
25
+ "column": 3,
26
+ "severity": 4,
27
+ "message": 5
28
+ }
29
+ ]
30
+ }
31
+ ]
32
+ },
33
+ {
34
+ "label": "Rubocop: Fix",
35
+ "type": "shell",
36
+ "command": "bundle",
37
+ "args": ["exec", "rubocop", "-A"],
38
+ "group": "build",
39
+ "presentation": {
40
+ "echo": true,
41
+ "reveal": "always",
42
+ "focus": false,
43
+ "panel": "shared"
44
+ }
45
+ },
46
+ {
47
+ "label": "Rubocop: Fix Current File",
48
+ "type": "shell",
49
+ "command": "bundle",
50
+ "args": ["exec", "rubocop", "-A", "${file}"],
51
+ "group": "build",
52
+ "presentation": {
53
+ "echo": true,
54
+ "reveal": "silent",
55
+ "focus": false,
56
+ "panel": "shared"
57
+ }
58
+ },
59
+ {
60
+ "label": "RSpec: Run All Tests",
61
+ "type": "shell",
62
+ "command": "bundle",
63
+ "args": ["exec", "rspec"],
64
+ "group": "test",
65
+ "presentation": {
66
+ "echo": true,
67
+ "reveal": "always",
68
+ "focus": false,
69
+ "panel": "shared"
70
+ }
71
+ },
72
+ {
73
+ "label": "RSpec: Run Current File",
74
+ "type": "shell",
75
+ "command": "bundle",
76
+ "args": ["exec", "rspec", "${file}"],
77
+ "group": "test",
78
+ "presentation": {
79
+ "echo": true,
80
+ "reveal": "always",
81
+ "focus": false,
82
+ "panel": "shared"
83
+ }
84
+ },
85
+ {
86
+ "label": "Bundle Install",
87
+ "type": "shell",
88
+ "command": "bundle",
89
+ "args": ["install"],
90
+ "group": "build",
91
+ "presentation": {
92
+ "echo": true,
93
+ "reveal": "always",
94
+ "focus": false,
95
+ "panel": "shared"
96
+ }
97
+ },
98
+ {
99
+ "label": "RBS: Validate",
100
+ "type": "shell",
101
+ "command": "bundle",
102
+ "args": ["exec", "rbs", "validate"],
103
+ "group": "test",
104
+ "presentation": {
105
+ "echo": true,
106
+ "reveal": "always",
107
+ "focus": false,
108
+ "panel": "shared"
109
+ },
110
+ "problemMatcher": [
111
+ {
112
+ "owner": "rbs",
113
+ "fileLocation": "absolute",
114
+ "pattern": [
115
+ {
116
+ "regexp": "^([^:]+):(\\d+):(\\d+): (.*)$",
117
+ "file": 1,
118
+ "line": 2,
119
+ "column": 3,
120
+ "message": 4
121
+ }
122
+ ]
123
+ }
124
+ ]
125
+ },
126
+ {
127
+ "label": "Steep: Type Check",
128
+ "type": "shell",
129
+ "command": "bundle",
130
+ "args": ["exec", "steep", "check"],
131
+ "group": "test",
132
+ "presentation": {
133
+ "echo": true,
134
+ "reveal": "always",
135
+ "focus": false,
136
+ "panel": "shared"
137
+ },
138
+ "problemMatcher": [
139
+ {
140
+ "owner": "steep",
141
+ "fileLocation": "absolute",
142
+ "pattern": [
143
+ {
144
+ "regexp": "^([^:]+):(\\d+):(\\d+): \\[([^\\]]+)\\] (.*)$",
145
+ "file": 1,
146
+ "line": 2,
147
+ "column": 3,
148
+ "severity": 4,
149
+ "message": 5
150
+ }
151
+ ]
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "label": "Steep: Watch Mode",
157
+ "type": "shell",
158
+ "command": "bundle",
159
+ "args": ["exec", "steep", "watch", "lib"],
160
+ "group": "build",
161
+ "isBackground": true,
162
+ "presentation": {
163
+ "echo": true,
164
+ "reveal": "always",
165
+ "focus": false,
166
+ "panel": "shared"
167
+ },
168
+ "problemMatcher": [
169
+ {
170
+ "owner": "steep",
171
+ "fileLocation": "absolute",
172
+ "pattern": [
173
+ {
174
+ "regexp": "^([^:]+):(\\d+):(\\d+): \\[([^\\]]+)\\] (.*)$",
175
+ "file": 1,
176
+ "line": 2,
177
+ "column": 3,
178
+ "severity": 4,
179
+ "message": 5
180
+ }
181
+ ],
182
+ "background": {
183
+ "activeOnStart": true,
184
+ "beginsPattern": "^# Type checking files:",
185
+ "endsPattern": "^(No type error detected|Detected \\d+ problems)"
186
+ }
187
+ }
188
+ ]
189
+ },
190
+ {
191
+ "label": "Steep: Watch All Targets",
192
+ "type": "shell",
193
+ "command": "bundle",
194
+ "args": ["exec", "steep", "watch", "--target", "lib"],
195
+ "group": "build",
196
+ "isBackground": true,
197
+ "presentation": {
198
+ "echo": true,
199
+ "reveal": "always",
200
+ "focus": false,
201
+ "panel": "shared"
202
+ },
203
+ "problemMatcher": [
204
+ {
205
+ "owner": "steep",
206
+ "fileLocation": "absolute",
207
+ "pattern": [
208
+ {
209
+ "regexp": "^([^:]+):(\\d+):(\\d+): \\[([^\\]]+)\\] (.*)$",
210
+ "file": 1,
211
+ "line": 2,
212
+ "column": 3,
213
+ "severity": 4,
214
+ "message": 5
215
+ }
216
+ ],
217
+ "background": {
218
+ "activeOnStart": true,
219
+ "beginsPattern": "^# Type checking files:",
220
+ "endsPattern": "^(No type error detected|Detected \\d+ problems)"
221
+ }
222
+ }
223
+ ]
224
+ },
225
+ {
226
+ "label": "RBS: Generate Prototypes",
227
+ "type": "shell",
228
+ "command": "bundle",
229
+ "args": ["exec", "rbs", "prototype", "rb", "lib"],
230
+ "group": "build",
231
+ "presentation": {
232
+ "echo": true,
233
+ "reveal": "always",
234
+ "focus": false,
235
+ "panel": "shared"
236
+ },
237
+ "problemMatcher": []
238
+ }
239
+ ]
240
+ }