rubocop-academia 0.1.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d2d5a79349001ab066f5e8212e0190d3ae23f46bd6b325dfe006617afb1a7e2
4
- data.tar.gz: 02a9f08f9f9564a080a60c54473d7f8814e802eacb0671fffad3a14bafa79a5a
3
+ metadata.gz: da776612864f982acb5ec0ed0cebd62b0647f09b4f0f7758f4cddda79ebb663a
4
+ data.tar.gz: 815e55496ace7c2c73e71feff0a21eb56ade7293097cbed6693b02666f038aa8
5
5
  SHA512:
6
- metadata.gz: 4bae7acabe1671a794533e03b05af3b07511440ae0e18e3fafd924a09697705984aa86dee50a0b041c82b785013592b2d5eb94ec176394bf2acedb58535acfba
7
- data.tar.gz: d653f4c4e7b1a386c4845ceb50fdb7d4ef2485cf078c035fd28faf33931c3b4c0c6d6e3f41006f1ab8c24a6ef929e480e00899100facc9489815c756996bc823
6
+ metadata.gz: b1f440fe9e3c15b64f1b15352f24e61ef69e030b9be91eca15abd403547d766f21192bc6165a04a79e5553f86fc2785040f8a69f3642d6e377fa7837dc7fc0b0
7
+ data.tar.gz: '083500052ced92edbc2ca3f25c186f12b00c878a4d1e0eb47cb307c94ba97369ce30875c92b2fb20cb5d87a8104a575b6ccdb696524ef8c1de54a6f36cd9423e'
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Academia
6
+ class YAMLLoad < RuboCop::Cop::Cop
7
+ RESTRICT_ON_SEND = %i[load unsafe_load load_file unsafe_load_file].freeze
8
+ MSG = 'Avoid using %<unsafe_call>s. Use %<safe_call>s instead.'
9
+ UNSAFE_METHODS = {
10
+ 'YAML.load' => 'YAML.safe_load',
11
+ 'Psych.load' => 'Psych.safe_load',
12
+ 'YAML.load_file' => 'YAML.safe_load_file',
13
+ 'Psych.load_file' => 'Psych.safe_load_file',
14
+ 'YAML.unsafe_load' => 'YAML.safe_load',
15
+ 'Psych.unsafe_load' => 'Psych.safe_load',
16
+ 'YAML.unsafe_load_file' => 'YAML.safe_load_file',
17
+ 'Psych.unsafe_load_file' => 'Psych.safe_load_file',
18
+ }.freeze
19
+
20
+ def_node_matcher :unsafe_yaml_load, <<~PATTERN
21
+ (send (const {nil? cbase} ${:YAML :Psych}) ${:load :unsafe_load :load_file :unsafe_load_file} ...)
22
+ PATTERN
23
+
24
+ def on_send(node)
25
+ unsafe_yaml_load(node) do |mojule, unsafe_method|
26
+ unsafe_call = "#{mojule}.#{unsafe_method}"
27
+ add_offense(
28
+ node,
29
+ message: format(
30
+ MSG,
31
+ unsafe_call: unsafe_call,
32
+ safe_call: UNSAFE_METHODS.fetch(unsafe_call),
33
+ ),
34
+ )
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -3,3 +3,4 @@
3
3
  require 'rubocop'
4
4
 
5
5
  require_relative 'rubocop/cop/academia/on_replica'
6
+ require_relative 'rubocop/cop/academia/yaml_load'
metadata CHANGED
@@ -1,28 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-academia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick White
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-21 00:00:00.000000000 Z
11
+ date: 2023-04-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Rubocop cops that provide linting for Academia.edu's codebase
14
- email: nickwhite@academia.edu
14
+ email:
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
19
  - lib/rubocop-academia.rb
20
20
  - lib/rubocop/cop/academia/on_replica.rb
21
+ - lib/rubocop/cop/academia/yaml_load.rb
21
22
  homepage: https://rubygems.org/gems/rubocop-academia
22
23
  licenses:
23
24
  - MIT
24
25
  metadata: {}
25
- post_install_message:
26
+ post_install_message:
26
27
  rdoc_options: []
27
28
  require_paths:
28
29
  - lib
@@ -37,8 +38,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
38
  - !ruby/object:Gem::Version
38
39
  version: '0'
39
40
  requirements: []
40
- rubygems_version: 3.0.3
41
- signing_key:
41
+ rubygems_version: 3.4.10
42
+ signing_key:
42
43
  specification_version: 4
43
44
  summary: Academia-specific rubocop cops
44
45
  test_files: []