import_js 0.5.1 → 0.6.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/lib/import_js/configuration.rb +51 -0
- data/lib/import_js/import_statement.rb +1 -1
- data/lib/import_js/import_statements.rb +25 -6
- data/lib/import_js/importer.rb +16 -0
- data/lib/import_js/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b839cb49fbb3b2162281bfc7dd5d8302aaec49d8
|
4
|
+
data.tar.gz: 28c0680aca73df347201d7e1e2e8271ef7d618f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 674ac79c69f71c4131f21f1ce82e0e4dae5650321d90b5823d21439514f93d83f007643c8becae2b188857f89e2c31bece2d4a6db8bc1f0fb643f98ce42e63a4
|
7
|
+
data.tar.gz: 7a4ad17523e23d16574152f241734b37cdf62747ae82d85b35db9580d3a5f3ad4bc7ecd64ecd82acf4b3ff94f67c862864b5ad9ab765e9edd22e990f2fdd1615
|
@@ -9,8 +9,10 @@ module ImportJS
|
|
9
9
|
'aliases' => {},
|
10
10
|
'declaration_keyword' => 'import',
|
11
11
|
'named_exports' => {},
|
12
|
+
'environments' => [],
|
12
13
|
'eslint_executable' => 'eslint',
|
13
14
|
'excludes' => [],
|
15
|
+
'group_imports' => true,
|
14
16
|
'ignore_package_prefixes' => [],
|
15
17
|
'import_dev_dependencies' => false,
|
16
18
|
'import_function' => 'require',
|
@@ -87,6 +89,55 @@ module ImportJS
|
|
87
89
|
end.compact.flatten
|
88
90
|
end
|
89
91
|
|
92
|
+
ENVIRONMENT_CORE_MODULES = {
|
93
|
+
# As listed in https://github.com/nodejs/node/tree/master/lib
|
94
|
+
'node' => %w[
|
95
|
+
assert
|
96
|
+
buffer
|
97
|
+
child_process
|
98
|
+
cluster
|
99
|
+
console
|
100
|
+
constants
|
101
|
+
crypto
|
102
|
+
dgram
|
103
|
+
dns
|
104
|
+
domain
|
105
|
+
events
|
106
|
+
fs
|
107
|
+
http
|
108
|
+
https
|
109
|
+
module
|
110
|
+
net
|
111
|
+
os
|
112
|
+
path
|
113
|
+
process
|
114
|
+
punycode
|
115
|
+
querystring
|
116
|
+
readline
|
117
|
+
repl
|
118
|
+
stream
|
119
|
+
string_decoder
|
120
|
+
sys
|
121
|
+
timers
|
122
|
+
tls
|
123
|
+
tty
|
124
|
+
url
|
125
|
+
util
|
126
|
+
v8
|
127
|
+
vm
|
128
|
+
zlib
|
129
|
+
],
|
130
|
+
}.freeze
|
131
|
+
|
132
|
+
# @return [Array<String>]
|
133
|
+
def environment_core_modules
|
134
|
+
result = []
|
135
|
+
get('environments').map do |environment|
|
136
|
+
result.concat(ENVIRONMENT_CORE_MODULES[environment])
|
137
|
+
end
|
138
|
+
result
|
139
|
+
end
|
140
|
+
|
90
141
|
private
|
91
142
|
|
92
143
|
# @param file [File]
|
@@ -11,12 +11,14 @@ module ImportJS
|
|
11
11
|
# Order is significant here
|
12
12
|
STYLES = [STYLE_IMPORT, STYLE_CONST, STYLE_VAR, STYLE_CUSTOM].freeze
|
13
13
|
|
14
|
+
PATH_TYPE_CORE_MODULE = :core_module
|
14
15
|
PATH_TYPE_PACKAGE = :package
|
15
16
|
PATH_TYPE_NON_RELATIVE = :non_relative
|
16
17
|
PATH_TYPE_RELATIVE = :relative
|
17
18
|
|
18
19
|
# Order is significant here
|
19
20
|
PATH_TYPES = [
|
21
|
+
PATH_TYPE_CORE_MODULE,
|
20
22
|
PATH_TYPE_PACKAGE,
|
21
23
|
PATH_TYPE_NON_RELATIVE,
|
22
24
|
PATH_TYPE_RELATIVE,
|
@@ -121,11 +123,16 @@ module ImportJS
|
|
121
123
|
!import_statement.parsed_and_untouched?
|
122
124
|
end.flatten.uniq(&:to_normalized).sort_by(&:to_normalized)
|
123
125
|
|
126
|
+
return [partitioned] unless @config.get('group_imports')
|
127
|
+
|
124
128
|
package_dependencies = @config.package_dependencies
|
129
|
+
core_modules = @config.environment_core_modules
|
125
130
|
partitioned.each do |import_statement|
|
126
131
|
# Figure out what group to put this import statement in
|
127
132
|
group_index = import_statement_group_index(
|
128
|
-
import_statement,
|
133
|
+
import_statement,
|
134
|
+
package_dependencies,
|
135
|
+
core_modules)
|
129
136
|
|
130
137
|
# Add the import statement to the group
|
131
138
|
groups[group_index] ||= []
|
@@ -138,11 +145,14 @@ module ImportJS
|
|
138
145
|
|
139
146
|
# @param import_statement [ImportJS::ImportStatement]
|
140
147
|
# @param package_dependencies [Array<String>]
|
148
|
+
# @param core_modules [Array<String>]
|
141
149
|
# @return [Number]
|
142
|
-
def import_statement_group_index(import_statement,
|
150
|
+
def import_statement_group_index(import_statement,
|
151
|
+
package_dependencies,
|
152
|
+
core_modules)
|
143
153
|
style = import_statement_style(import_statement)
|
144
154
|
path_type = import_statement_path_type(
|
145
|
-
import_statement, package_dependencies)
|
155
|
+
import_statement, package_dependencies, core_modules)
|
146
156
|
|
147
157
|
GROUPINGS["#{style} #{path_type}"]
|
148
158
|
end
|
@@ -164,10 +174,19 @@ module ImportJS
|
|
164
174
|
# Determine import path type
|
165
175
|
# @param import_statement [ImportJS::ImportStatement]
|
166
176
|
# @param package_dependencies [Array<String>]
|
177
|
+
# @param core_modules [Array<String>]
|
167
178
|
# @return [String] 'package, 'non-relative', 'relative'
|
168
|
-
def import_statement_path_type(import_statement,
|
169
|
-
|
170
|
-
|
179
|
+
def import_statement_path_type(import_statement,
|
180
|
+
package_dependencies,
|
181
|
+
core_modules)
|
182
|
+
|
183
|
+
return PATH_TYPE_RELATIVE if import_statement.path.start_with?('.')
|
184
|
+
return PATH_TYPE_CORE_MODULE if core_modules.include?(import_statement.path)
|
185
|
+
#
|
186
|
+
# If there is a slash in the path, remove that and everything after it.
|
187
|
+
# This is so that imports for modules inside package dependencies end up
|
188
|
+
# in the right group (PATH_TYPE_PACKAGE).
|
189
|
+
path = import_statement.path.sub(%r{\A(.*?)/.*\Z}, '\1')
|
171
190
|
return PATH_TYPE_PACKAGE if package_dependencies.include?(path)
|
172
191
|
PATH_TYPE_NON_RELATIVE
|
173
192
|
end
|
data/lib/import_js/importer.rb
CHANGED
@@ -244,6 +244,16 @@ module ImportJS
|
|
244
244
|
old_imports_range.each do
|
245
245
|
@editor.delete_line(old_imports_range.first)
|
246
246
|
end
|
247
|
+
|
248
|
+
if import_strings.empty? &&
|
249
|
+
@editor.read_line(old_imports_range.first).empty?
|
250
|
+
# We have no newlines to write back to the file. Clearing out potential
|
251
|
+
# whitespace where the imports used to be leaves the file in a better
|
252
|
+
# state.
|
253
|
+
@editor.delete_line(old_imports_range.first)
|
254
|
+
return
|
255
|
+
end
|
256
|
+
|
247
257
|
import_strings.reverse_each do |import_string|
|
248
258
|
# We need to add each line individually because the Vim buffer will
|
249
259
|
# convert newline characters to `~@`.
|
@@ -374,6 +384,12 @@ module ImportJS
|
|
374
384
|
matched_modules << js_module if js_module
|
375
385
|
end
|
376
386
|
|
387
|
+
@config.environment_core_modules.each do |dep|
|
388
|
+
next unless dep.casecmp(variable_name) == 0
|
389
|
+
|
390
|
+
matched_modules << JSModule.new(import_path: dep)
|
391
|
+
end
|
392
|
+
|
377
393
|
# If you have overlapping lookup paths, you might end up seeing the same
|
378
394
|
# module to import twice. In order to dedupe these, we remove the module
|
379
395
|
# with the longest path
|
data/lib/import_js/version.rb
CHANGED