rails-annotate-solargraph 0.3.0 → 0.4.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 +4 -4
- data/.vscode/settings.json +1 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +22 -2
- data/lib/rails/annotate/solargraph/configuration.rb +6 -2
- data/lib/rails/annotate/solargraph/model.rb +45 -10
- data/lib/rails/annotate/solargraph/version.rb +1 -1
- data/lib/rails/annotate/solargraph.rb +16 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80d2fcb8fc2090d6a1eabc8f510b3b9fec1608da1870c7d88b301ce64907920a
|
4
|
+
data.tar.gz: 9553090d359f8f829e955349cac6c527c43335433e38d91152862780cce3ab63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b2415d929d939454a4f65277d85baa03935219226c6ad5b35c35264cd2de94bb1b1d55a55a55ee8cc737523210e3653c648bea50798dd53b580767fbb6a2eec
|
7
|
+
data.tar.gz: 9436e870a6cbc28e636151b76717cde5bf4186f44bc8af4293ada785f1c50e039895fcf5cb38dd27868c5e88027df9f52be8ee070591e0635de30fdba7437aef
|
data/.vscode/settings.json
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -63,11 +63,31 @@ You can change the gem's default configuration like so:
|
|
63
63
|
```ruby
|
64
64
|
# config/initializers/rails_annotate_solargraph.rb
|
65
65
|
|
66
|
-
Rails
|
67
|
-
|
66
|
+
if ::Rails.env.development?
|
67
|
+
::Rails::Annotate::Solargraph.configure do |conf|
|
68
|
+
conf.annotation_position = :top # `:schema_file` by default
|
69
|
+
end
|
68
70
|
end
|
69
71
|
```
|
70
72
|
|
73
|
+
#### annotation_position
|
74
|
+
|
75
|
+
There are a few values for this option:
|
76
|
+
|
77
|
+
- `:schema_file` -- default value, annotations get saved to a special file `app/models/annotate_solargraph_schema.rb`
|
78
|
+
- `:bottom` -- annotations are appended to the model files
|
79
|
+
- `:top` -- annotations are prepended to the model files
|
80
|
+
|
81
|
+
### Update
|
82
|
+
|
83
|
+
To update this gem you should generate the rakefiles once again. Overwrite them.
|
84
|
+
|
85
|
+
```sh
|
86
|
+
$ rails g annotate:solargraph:install
|
87
|
+
$ rake annotate:solargraph:remove
|
88
|
+
$ rake annotate:solargraph:generate
|
89
|
+
```
|
90
|
+
|
71
91
|
## Development
|
72
92
|
|
73
93
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -9,10 +9,10 @@ module Rails
|
|
9
9
|
# @return [Symbol]
|
10
10
|
attr_reader :annotation_position
|
11
11
|
|
12
|
-
ANNOTATION_POSITIONS = ::Set[:bottom, :top].freeze
|
12
|
+
ANNOTATION_POSITIONS = ::Set[:bottom, :top, :schema_file].freeze
|
13
13
|
|
14
14
|
def initialize
|
15
|
-
@annotation_position = :
|
15
|
+
@annotation_position = :schema_file
|
16
16
|
end
|
17
17
|
|
18
18
|
# @param val [Symbol]
|
@@ -22,6 +22,10 @@ module Rails
|
|
22
22
|
|
23
23
|
@annotation_position = val
|
24
24
|
end
|
25
|
+
|
26
|
+
def schema_file?
|
27
|
+
@annotation_position == :schema_file
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
@@ -1,17 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'fileutils'
|
4
|
+
|
3
5
|
module Rails
|
4
6
|
module Annotate
|
5
7
|
module Solargraph
|
6
8
|
class Model
|
7
9
|
using TerminalColors::Refinement
|
8
10
|
|
9
|
-
# @return [String]
|
10
|
-
ANNOTATION_START = "\n# %%<RailsAnnotateSolargraph:Start>%%"
|
11
|
-
# @return [String]
|
12
|
-
ANNOTATION_END = "%%<RailsAnnotateSolargraph:End>%%\n\n"
|
13
|
-
# @return [Regexp]
|
14
|
-
ANNOTATION_REGEXP = /#{ANNOTATION_START}.*#{ANNOTATION_END}/m.freeze
|
15
11
|
# @return [Regexp]
|
16
12
|
MAGIC_COMMENT_REGEXP = /(^#\s*encoding:.*(?:\n|r\n))|(^# coding:.*(?:\n|\r\n))|(^# -\*- coding:.*(?:\n|\r\n))|(^# -\*- encoding\s?:.*(?:\n|\r\n))|(^#\s*frozen_string_literal:.+(?:\n|\r\n))|(^# -\*- frozen_string_literal\s*:.+-\*-(?:\n|\r\n))/.freeze
|
17
13
|
|
@@ -40,6 +36,26 @@ module Rails
|
|
40
36
|
::Object.to_s
|
41
37
|
end
|
42
38
|
end
|
39
|
+
|
40
|
+
# @param klass [Class]
|
41
|
+
# @return [String]
|
42
|
+
def annotation_start(klass = nil)
|
43
|
+
table_name = klass && CONFIG.schema_file? ? ":#{klass.table_name}" : ''
|
44
|
+
"\n# %%<RailsAnnotateSolargraph:Start#{table_name}>%%"
|
45
|
+
end
|
46
|
+
|
47
|
+
# @param klass [Class]
|
48
|
+
# @return [String]
|
49
|
+
def annotation_end(klass = nil)
|
50
|
+
table_name = klass && CONFIG.schema_file? ? ":#{klass.table_name}" : ''
|
51
|
+
"%%<RailsAnnotateSolargraph:End#{table_name}>%%\n\n"
|
52
|
+
end
|
53
|
+
|
54
|
+
# @param klass [Class]
|
55
|
+
# @return [Regexp]
|
56
|
+
def annotation_regexp(klass = nil)
|
57
|
+
/#{annotation_start(klass)}.*#{annotation_end(klass)}/m
|
58
|
+
end
|
43
59
|
end
|
44
60
|
|
45
61
|
# @return [String]
|
@@ -51,7 +67,23 @@ module Rails
|
|
51
67
|
# @param klass [Class]
|
52
68
|
def initialize(klass)
|
53
69
|
@klass = klass
|
54
|
-
|
70
|
+
base_file_name = CONFIG.schema_file? ? SCHEMA_FILE_NAME : "#{klass.to_s.underscore}.rb"
|
71
|
+
@file_name = ::File.join(::Rails.root, MODEL_DIR, base_file_name)
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return [String]
|
75
|
+
def annotation_start
|
76
|
+
self.class.annotation_start(@klass)
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [String]
|
80
|
+
def annotation_end
|
81
|
+
self.class.annotation_end(@klass)
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [Regexp]
|
85
|
+
def annotation_regexp
|
86
|
+
self.class.annotation_regexp(@klass)
|
55
87
|
end
|
56
88
|
|
57
89
|
# @param :write [Boolean]
|
@@ -79,8 +111,10 @@ module Rails
|
|
79
111
|
# @param :write [Boolean]
|
80
112
|
# @return [Array<String>] Old file content followed by new content.
|
81
113
|
def remove_annotation(write: true)
|
114
|
+
return ['', ''] unless ::File.exist?(@file_name)
|
115
|
+
|
82
116
|
file_content = ::File.read(@file_name)
|
83
|
-
new_file_content = file_content.sub(
|
117
|
+
new_file_content = file_content.sub(annotation_regexp, '')
|
84
118
|
result = [file_content, new_file_content]
|
85
119
|
return result unless write
|
86
120
|
return result if file_content == new_file_content
|
@@ -93,7 +127,7 @@ module Rails
|
|
93
127
|
def annotation
|
94
128
|
doc_string = ::String.new
|
95
129
|
doc_string << <<~DOC
|
96
|
-
#{
|
130
|
+
#{annotation_start}
|
97
131
|
# @!parse
|
98
132
|
# class #{@klass} < #{@klass.superclass}
|
99
133
|
DOC
|
@@ -117,7 +151,7 @@ module Rails
|
|
117
151
|
|
118
152
|
doc_string << <<~DOC.chomp
|
119
153
|
# end
|
120
|
-
# #{
|
154
|
+
# #{annotation_end}
|
121
155
|
DOC
|
122
156
|
end
|
123
157
|
|
@@ -133,6 +167,7 @@ module Rails
|
|
133
167
|
# @param content [String]
|
134
168
|
# @return [void]
|
135
169
|
def write_file(file_name, content)
|
170
|
+
::FileUtils.touch(file_name) unless ::File.exists?(file_name)
|
136
171
|
::File.write(file_name, content)
|
137
172
|
puts "modify".rjust(12).with_styles(:bold, :green) + " #{relative_file_name(file_name)}"
|
138
173
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'set'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
require_relative "solargraph/version"
|
6
7
|
require_relative "solargraph/configuration"
|
@@ -19,11 +20,16 @@ module Rails
|
|
19
20
|
CONFIG = Configuration.new
|
20
21
|
# @return [Set<Symbol>]
|
21
22
|
VALID_MODIFICATION_METHODS = ::Set[:annotate, :remove_annotation].freeze
|
23
|
+
# @return [String]
|
24
|
+
SCHEMA_CLASS_NAME = 'AnnotateSolargraphSchema'
|
25
|
+
# @return [String]
|
26
|
+
SCHEMA_FILE_NAME = "annotate_solargraph_schema.rb"
|
22
27
|
|
23
28
|
class << self
|
24
29
|
# @return [Array<String>] Array of changed files.
|
25
30
|
def generate
|
26
31
|
title 'Generating model schema annotations'
|
32
|
+
create_schema_file
|
27
33
|
modify_models :annotate
|
28
34
|
end
|
29
35
|
|
@@ -49,6 +55,16 @@ module Rails
|
|
49
55
|
|
50
56
|
include TerminalColors
|
51
57
|
|
58
|
+
def create_schema_file
|
59
|
+
schema_file = ::File.join(::Rails.root, MODEL_DIR, SCHEMA_FILE_NAME)
|
60
|
+
return unless CONFIG.schema_file? && !::File.exist?(schema_file)
|
61
|
+
|
62
|
+
::FileUtils.touch(schema_file)
|
63
|
+
::File.write schema_file, <<~SCHEMA
|
64
|
+
module AnnotateSolargraphSchema; end
|
65
|
+
SCHEMA
|
66
|
+
end
|
67
|
+
|
52
68
|
# @param method [Symbol] Name of the method that will be called on every loaded Model
|
53
69
|
# @return [Array<String>] Array of changed files.
|
54
70
|
def modify_models(method)
|