platformos-check 0.4.12 → 0.4.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/CONTRIBUTING.md +20 -18
- data/README.md +108 -57
- data/RELEASING.md +14 -7
- data/TROUBLESHOOTING.md +19 -10
- data/data/platformos_liquid/documentation/filters.json +1 -1
- data/data/platformos_liquid/documentation/latest.json +1 -1
- data/data/platformos_liquid/documentation/tags.json +1 -1
- data/docs/api/check.md +7 -6
- data/docs/api/html_check.md +12 -13
- data/docs/api/liquid_check.md +17 -21
- data/docs/api/yaml_check.md +3 -3
- data/docs/checks/TEMPLATE.md.erb +16 -11
- data/docs/checks/convert_include_to_render.md +29 -13
- data/docs/checks/deprecated_filter.md +5 -9
- data/docs/checks/form_action.md +12 -12
- data/docs/checks/form_authenticity_token.md +21 -15
- data/docs/checks/graphql_in_for_loop.md +15 -13
- data/docs/checks/html_parsing_error.md +12 -12
- data/docs/checks/img_lazy_loading.md +13 -11
- data/docs/checks/img_width_and_height.md +21 -23
- data/docs/checks/include_in_render.md +11 -11
- data/docs/checks/invalid_args.md +11 -11
- data/docs/checks/liquid_tag.md +12 -12
- data/docs/checks/missing_enable_comment.md +7 -7
- data/docs/checks/missing_template.md +14 -13
- data/docs/checks/parse_json_format.md +15 -14
- data/docs/checks/parser_blocking_javascript.md +19 -14
- data/docs/checks/required_layout_object.md +5 -7
- data/docs/checks/space_inside_braces.md +12 -12
- data/docs/checks/syntax_error.md +10 -10
- data/docs/checks/template_length.md +12 -12
- data/docs/checks/translation_files_match.md +10 -11
- data/docs/checks/translation_key_exists.md +10 -11
- data/docs/checks/undefined_object.md +11 -13
- data/docs/checks/unknown_filter.md +11 -11
- data/docs/checks/unreachable_code.md +11 -11
- data/docs/checks/unused_assign.md +11 -11
- data/docs/checks/unused_partial.md +7 -11
- data/docs/checks/valid_yaml.md +11 -11
- data/docs/language_server/how_to_correct_code_with_code_actions_and_execute_command.md +62 -70
- data/lib/platformos_check/app.rb +23 -14
- data/lib/platformos_check/app_file.rb +25 -4
- data/lib/platformos_check/asset_file.rb +1 -1
- data/lib/platformos_check/file_system_storage.rb +1 -1
- data/lib/platformos_check/form_file.rb +1 -1
- data/lib/platformos_check/graphql_file.rb +1 -1
- data/lib/platformos_check/language_server/completion_context.rb +2 -0
- data/lib/platformos_check/language_server/handler.rb +6 -6
- data/lib/platformos_check/language_server/variable_lookup_finder.rb +8 -10
- data/lib/platformos_check/layout_file.rb +1 -1
- data/lib/platformos_check/partial_file.rb +1 -1
- data/lib/platformos_check/platformos_liquid/documentation.rb +2 -2
- data/lib/platformos_check/translation_file.rb +1 -1
- data/lib/platformos_check/version.rb +1 -1
- data/platformos-check.gemspec +1 -1
- metadata +5 -5
data/lib/platformos_check/app.rb
CHANGED
@@ -6,20 +6,20 @@ require "pathname"
|
|
6
6
|
|
7
7
|
module PlatformosCheck
|
8
8
|
class App
|
9
|
-
API_CALLS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(notifications/api_call_notifications|api_calls)/(.+)\.liquid\z}
|
10
|
-
ASSETS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)assets/}
|
11
|
-
EMAILS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(notifications/email_notifications|emails)/(.+)\.liquid\z}
|
12
|
-
GRAPHQL_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(graph_queries|graphql)s?/(.+)\.graphql\z}
|
13
|
-
|
14
|
-
MIGRATIONS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)migrations/(.+)\.liquid\z}
|
15
|
-
PAGES_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(pages|views/pages)/(.+).liquid\z}
|
16
|
-
PARTIALS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(views/partials|lib)/(.+)\.liquid\z}
|
17
|
-
FORMS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(form_configurations|forms)/(.+)\.liquid\z}
|
18
|
-
LAYOUTS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(views/layouts)/(.+).liquid\z}
|
19
|
-
SCHEMA_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(custom_model_types|model_schemas|schema)/(.+)\.yml\z}
|
20
|
-
SMSES_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)(notifications/sms_notifications|smses)/(.+)\.liquid\z}
|
9
|
+
API_CALLS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(notifications/api_call_notifications|api_calls)/(.+)\.liquid\z}
|
10
|
+
ASSETS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)assets/}
|
11
|
+
EMAILS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(notifications/email_notifications|emails)/(.+)\.liquid\z}
|
12
|
+
GRAPHQL_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(graph_queries|graphql)s?/(.+)\.graphql\z}
|
13
|
+
|
14
|
+
MIGRATIONS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)migrations/(.+)\.liquid\z}
|
15
|
+
PAGES_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(pages|views/pages)/(.+).liquid\z}
|
16
|
+
PARTIALS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(views/partials|lib)/(.+)\.liquid\z}
|
17
|
+
FORMS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(form_configurations|forms)/(.+)\.liquid\z}
|
18
|
+
LAYOUTS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(views/layouts)/(.+).liquid\z}
|
19
|
+
SCHEMA_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(custom_model_types|model_schemas|schema)/(.+)\.yml\z}
|
20
|
+
SMSES_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)(notifications/sms_notifications|smses)/(.+)\.liquid\z}
|
21
21
|
USER_SCHEMA_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/)?)user.yml}
|
22
|
-
TRANSLATIONS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|modules/(.+)(private|public|marketplace_builder|app)/)?)translations/(.+)\.yml}
|
22
|
+
TRANSLATIONS_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/|(app/)?modules/(.+)(private|public|marketplace_builder|app)/)?)translations/(.+)\.yml}
|
23
23
|
CONFIG_REGEX = %r{\A(?-mix:^/?((marketplace_builder|app)/)?)config.yml}
|
24
24
|
|
25
25
|
REGEXP_MAP = {
|
@@ -60,10 +60,19 @@ module PlatformosCheck
|
|
60
60
|
next unless regexp
|
61
61
|
|
62
62
|
f = klass.new(path, storage)
|
63
|
+
|
63
64
|
if remove
|
64
65
|
@grouped_files[klass].delete(f.name)
|
66
|
+
if f.module_overwrite_file? && storage.files.include?(f.module_original_file_path)
|
67
|
+
original_file = klass.new(f.module_original_file_path, storage)
|
68
|
+
@grouped_files[klass][original_file.name] = original_file
|
69
|
+
elsif f.module_original_file? && storage.files.include?(f.module_overwrite_file_path)
|
70
|
+
overwrite_file = klass.new(f.module_overwrite_file_path, storage)
|
71
|
+
@grouped_files[klass][overwrite_file.name] = overwrite_file
|
72
|
+
end
|
65
73
|
else
|
66
|
-
|
74
|
+
# we want to keep the reference to a module overwrite, if exists
|
75
|
+
@grouped_files[klass][f.name] = f unless f.module_original_file? && @grouped_files[klass][f.name] && @grouped_files[klass][f.name].module_overwrite_file?
|
67
76
|
end
|
68
77
|
end
|
69
78
|
@grouped_files
|
@@ -48,10 +48,31 @@ module PlatformosCheck
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def module_name
|
51
|
-
@module_name ||=
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
@module_name ||= if module_original_file?
|
52
|
+
dir_names[1]
|
53
|
+
elsif module_overwrite_file?
|
54
|
+
return dir_names[2]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def module_original_file?
|
59
|
+
dir_names[0] == 'modules'
|
60
|
+
end
|
61
|
+
|
62
|
+
def module_overwrite_file?
|
63
|
+
dir_names[0] == 'app' && dir_names[1] == 'modules'
|
64
|
+
end
|
65
|
+
|
66
|
+
def module_overwrite_file_path
|
67
|
+
@module_overwrite_file_path ||= module_original_file? ? 'app/' + relative_path.to_s : nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def module_original_file_path
|
71
|
+
@module_original_file_path ||= module_overwrite_file? ? dir_names[1..].join(File::SEPARATOR) : nil
|
72
|
+
end
|
73
|
+
|
74
|
+
def dir_names
|
75
|
+
@dir_names ||= @relative_path.split(File::SEPARATOR).reject(&:empty?)
|
55
76
|
end
|
56
77
|
|
57
78
|
# For the corrector to work properly, we should have a
|
@@ -4,7 +4,7 @@ require "zlib"
|
|
4
4
|
|
5
5
|
module PlatformosCheck
|
6
6
|
class AssetFile < AppFile
|
7
|
-
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/assets/|modules/((\w|-)*)/(private|public)/assets/)}
|
7
|
+
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/assets/|(app/)?modules/((\w|-)*)/(private|public)/assets/)}
|
8
8
|
|
9
9
|
def initialize(relative_path, storage)
|
10
10
|
super
|
@@ -31,7 +31,7 @@ module PlatformosCheck
|
|
31
31
|
|
32
32
|
file(relative_path).dirname.mkpath unless file(relative_path).dirname.directory?
|
33
33
|
file(relative_path).write(content, mode: 'w+b', encoding: 'UTF-8')
|
34
|
-
@platformos_app&.update([relative_path])
|
34
|
+
@platformos_app&.update([relative_path], remove: !file_exists?(relative_path))
|
35
35
|
end
|
36
36
|
|
37
37
|
def remove(relative_path)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module PlatformosCheck
|
4
4
|
class FormFile < LiquidFile
|
5
|
-
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(form_configurations|forms)/|modules/((\w|-)*)/(private|public)/(form_configurations|forms)/)}
|
5
|
+
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(form_configurations|forms)/|(app/)?modules/((\w|-)*)/(private|public)/(form_configurations|forms)/)}
|
6
6
|
|
7
7
|
def form?
|
8
8
|
true
|
@@ -4,7 +4,7 @@ require 'graphql'
|
|
4
4
|
|
5
5
|
module PlatformosCheck
|
6
6
|
class GraphqlFile < AppFile
|
7
|
-
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(graph_queries|graphql)s?/|modules/((\w|-)*)/(private|public)/(graph_queries|graphql)s?/)}
|
7
|
+
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(graph_queries|graphql)s?/|(app/)?modules/((\w|-)*)/(private|public)/(graph_queries|graphql)s?/)}
|
8
8
|
|
9
9
|
def write
|
10
10
|
content = rewriter.to_s
|
@@ -169,8 +169,8 @@ module PlatformosCheck
|
|
169
169
|
|
170
170
|
def on_workspace_did_create_files(_id, params)
|
171
171
|
paths = params[:files]
|
172
|
-
|
173
|
-
|
172
|
+
&.map { |file| file[:uri] }
|
173
|
+
&.map { |uri| file_path(uri) }
|
174
174
|
return unless paths
|
175
175
|
|
176
176
|
paths.each do |path|
|
@@ -184,8 +184,8 @@ module PlatformosCheck
|
|
184
184
|
|
185
185
|
def on_workspace_did_delete_files(_id, params)
|
186
186
|
absolute_paths = params[:files]
|
187
|
-
|
188
|
-
|
187
|
+
&.map { |file| file[:uri] }
|
188
|
+
&.map { |uri| file_path(uri) }
|
189
189
|
|
190
190
|
return unless absolute_paths
|
191
191
|
|
@@ -202,8 +202,8 @@ module PlatformosCheck
|
|
202
202
|
# (which might trigger another platformos_app analysis).
|
203
203
|
def on_workspace_will_rename_files(id, params)
|
204
204
|
relative_paths = params[:files]
|
205
|
-
|
206
|
-
|
205
|
+
&.map { |file| [file[:oldUri], file[:newUri]] }
|
206
|
+
&.map { |(old_uri, new_uri)| [relative_path_from_uri(old_uri), relative_path_from_uri(new_uri)] }
|
207
207
|
return @bridge.send_response(id, nil) unless relative_paths
|
208
208
|
|
209
209
|
relative_paths.each do |(old_path, new_path)|
|
@@ -75,11 +75,10 @@ module PlatformosCheck
|
|
75
75
|
is_liquid_variable = content =~ Liquid::VariableStart
|
76
76
|
is_in_variable_segment = previous_char =~ VARIABLE_LOOKUP_CHARACTERS
|
77
77
|
is_on_blank_variable_lookup_position = content[0..cursor - 1] =~ /[{:,-]\s+$/
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
)
|
78
|
+
|
79
|
+
is_liquid_variable && (
|
80
|
+
is_in_variable_segment ||
|
81
|
+
is_on_blank_variable_lookup_position
|
83
82
|
)
|
84
83
|
end
|
85
84
|
|
@@ -162,11 +161,10 @@ module PlatformosCheck
|
|
162
161
|
is_liquid_tag = content.match?(Liquid::TagStart)
|
163
162
|
is_in_variable_segment = markup =~ ENDS_WITH_POTENTIAL_LOOKUP
|
164
163
|
is_on_blank_variable_lookup_position = markup =~ ENDS_WITH_BLANK_POTENTIAL_LOOKUP
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
)
|
164
|
+
|
165
|
+
is_liquid_tag && (
|
166
|
+
is_in_variable_segment ||
|
167
|
+
is_on_blank_variable_lookup_position
|
170
168
|
)
|
171
169
|
end
|
172
170
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module PlatformosCheck
|
4
4
|
class LayoutFile < LiquidFile
|
5
|
-
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(views/layouts)/|modules/((\w|-)*)/(private|public)/(views/layouts)/)}
|
5
|
+
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(views/layouts)/|(app/)?modules/((\w|-)*)/(private|public)/(views/layouts)/)}
|
6
6
|
|
7
7
|
def layout?
|
8
8
|
true
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module PlatformosCheck
|
4
4
|
class PartialFile < LiquidFile
|
5
|
-
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(views/partials|liquid_views|views|lib)/|modules/((\w|-)*)/(private|public)/(views/partials|liquid_views|views|lib)/)}
|
5
|
+
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(views/partials|liquid_views|views|lib)/|(app/)?modules/((\w|-)*)/(private|public)/(views/partials|liquid_views|views|lib)/)}
|
6
6
|
|
7
7
|
def partial?
|
8
8
|
true
|
@@ -22,8 +22,8 @@ module PlatformosCheck
|
|
22
22
|
property_entry = SourceIndex
|
23
23
|
.objects
|
24
24
|
.find { |entry| entry.name == object_name }
|
25
|
-
|
26
|
-
|
25
|
+
&.properties
|
26
|
+
&.find { |prop| prop.name == property_name }
|
27
27
|
|
28
28
|
render_doc(property_entry)
|
29
29
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module PlatformosCheck
|
4
4
|
class TranslationFile < YamlFile
|
5
|
-
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(translations)/|modules/((\w|-)*)/(private|public)/(translations)/)}
|
5
|
+
DIR_PREFIX = %r{\A/?((marketplace_builder|app)/(translations)/|(app/)?modules/((\w|-)*)/(private|public)/(translations)/)}
|
6
6
|
TRANSLATION_FILTERS = Set.new(%w[t t_escape translate translate_escape]).freeze
|
7
7
|
attr_reader :language
|
8
8
|
|
data/platformos-check.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.require_paths = ["lib"]
|
29
29
|
|
30
30
|
spec.add_dependency('graphql', '~> 2.0.0')
|
31
|
-
spec.add_dependency('liquid', '
|
31
|
+
spec.add_dependency('liquid', '5.4.0')
|
32
32
|
spec.add_dependency('nokogiri', '>= 1.12')
|
33
33
|
spec.add_dependency('parser', '~> 3')
|
34
34
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: platformos-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Bliszczyk
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-10-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: graphql
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
name: liquid
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - '='
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: 5.4.0
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- -
|
40
|
+
- - '='
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 5.4.0
|
43
43
|
- !ruby/object:Gem::Dependency
|
@@ -373,7 +373,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
373
373
|
- !ruby/object:Gem::Version
|
374
374
|
version: '0'
|
375
375
|
requirements: []
|
376
|
-
rubygems_version: 3.5.
|
376
|
+
rubygems_version: 3.5.18
|
377
377
|
signing_key:
|
378
378
|
specification_version: 4
|
379
379
|
summary: A platformOS App Linter
|