jslinting-rails 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d2f8c0ce79c85ed178f30d654fe012f01b11b2fdedb62708567f0d2ccae7c25a
4
+ data.tar.gz: 17568f673307da1e2bee6e2c496f57bfcfe73d8d4361a6b84e801eade6ffeb70
5
+ SHA512:
6
+ metadata.gz: e7f6ca972cf10d09a5ecdbcc602a61e16800cfa3fb4b15f26d0898d44ca172e075a98770eb8d229ea43c24fc19959de7f785f02b4ec4184b8ca0d24236276ff6
7
+ data.tar.gz: 57a3e30c1680b84f8f5c8c997475ef3d9fc77233a061f2ce571c61a6eaf0bd4b724867588523a861d4789a858ec1bbe2e636b6eaa32a6a3ee49e3e5cfa576fb2
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright Ethan Kircher
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # JavaScript Linting for Rails
2
+
3
+ This gem provides a basic eslint and prettier setup for Rails apps setup with [jsbundling-rails](https://github.com/rails/jsbundling-rails).
4
+
5
+ ## Installation
6
+
7
+ Ensure [jsbundling-rails](https://github.com/rails/jsbundling-rails) is installed in your application, as
8
+ `jslinting-rails` relies on it.
9
+
10
+ If you are using node, ensure npx >7.1 is installed.
11
+
12
+ If you are using bun, then you must have the bun runtime installed.
13
+
14
+ To get started run:
15
+
16
+ ```bash
17
+ ./bin/bundle add jslinting-rails --group development
18
+ ```
19
+
20
+ ```bash
21
+ ./bin/rails jslinting:install
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ This gem adds two scripts to your `package.json`, `lint` and `format`.
27
+
28
+ They can be run directly through your package manager with
29
+
30
+ ```bash
31
+ yarn run lint
32
+ yarn run format
33
+ ```
34
+
35
+ or as a task via
36
+
37
+ ```bash
38
+ rails javascript:lint
39
+ rails javascript:format
40
+ ```
41
+
42
+ ## License
43
+
44
+ `jslinting-rails` is released under the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,9 @@
1
+ import globals from "globals";
2
+ import js from "@eslint/js";
3
+ import eslintConfigPrettier from "eslint-config-prettier";
4
+
5
+ export default [
6
+ { languageOptions: { globals: globals.browser } },
7
+ js.configs.recommended,
8
+ eslintConfigPrettier,
9
+ ];
@@ -0,0 +1,3 @@
1
+ {
2
+ "printWidth": 100
3
+ }
data/lib/install.rb ADDED
@@ -0,0 +1,27 @@
1
+ say "Install eslint and prettier"
2
+ run "#{Jslinting.package_manager} add -D eslint @eslint/js eslint globals prettier eslint-config-prettier"
3
+
4
+ say "Setup eslint"
5
+ copy_file "#{__dir__}/install/eslint/eslint.config.mjs", "eslint.config.mjs"
6
+ copy_file "#{__dir__}/install/prettier/prettierrc.json", ".prettierrc"
7
+
8
+ say "Add scripts"
9
+ lint_script = "eslint app/javascript --max-warnings 0 && prettier app/javascript --check"
10
+ format_script = "eslint app/javascript --fix && prettier app/javascript --write"
11
+
12
+ case `npx -v`.to_f
13
+ when 7.1...8.0
14
+ run %(npm set-script lint "#{lint_script}")
15
+ run %(npm set-script format "#{format_script}")
16
+
17
+ say "Formating..."
18
+ run "#{Jslinting.package_manager} run format"
19
+ when (8.0..)
20
+ run %(npm pkg set scripts.lint="#{lint_script}")
21
+ run %(npm pkg set scripts.format="#{format_script}")
22
+
23
+ say "Formating..."
24
+ run "#{Jslinting.package_manager} run format"
25
+ else
26
+ say %(Add "scripts": { "lint": "#{lint_script}", "format": "#{format_script}" } to your package.json), :green
27
+ end
@@ -0,0 +1,4 @@
1
+ module Jslinting
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module Jslinting
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,21 @@
1
+ module Jslinting
2
+ def self.package_manager
3
+ case
4
+ when File.exist?("bun.lockb") then :bun
5
+ when File.exist?("yarn.lock") then :yarn
6
+ when File.exist?("pnpm-lock.yaml") then :pnpm
7
+ when File.exist?("package-lock.json") then :npm
8
+ when pm_exists?("bun") then :bun
9
+ when pm_exists?("yarn") then :yarn
10
+ when pm_exists?("pnpm") then :pnpm
11
+ when pm_exists?("npm") then :npm
12
+ end
13
+ end
14
+
15
+ def self.pm_exists?(pm)
16
+ system "which #{pm} > /dev/null"
17
+ end
18
+ end
19
+
20
+ require "jslinting/version"
21
+ require "jslinting/engine"
@@ -0,0 +1,6 @@
1
+ namespace :jslinting do
2
+ desc "Install and setup JavaScript linting"
3
+ task :install do
4
+ system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../../install.rb", __dir__)}"
5
+ end
6
+ end
@@ -0,0 +1,39 @@
1
+ namespace :javascript do
2
+ desc "Lint your JavaScript"
3
+ lint_task = task :lint do
4
+ command = Jslinting::Tasks.lint_command
5
+ unless system(command)
6
+ raise "jslinting-rails: Command lint failed, ensure `#{command}` runs without errors"
7
+ end
8
+ end
9
+
10
+ lint_task.prereqs << :install unless ENV["SKIP_YARN_INSTALL"] || ENV["SKIP_BUN_INSTALL"]
11
+
12
+ desc "Format your JavaScript"
13
+ format_task = task :format do
14
+ command = Jslinting::Tasks.lint_command
15
+ unless system(command)
16
+ raise "jslinting-rails: Command format failed, ensure `#{command}` runs without errors"
17
+ end
18
+ end
19
+
20
+ format_task.prereqs << :install unless ENV["SKIP_YARN_INSTALL"] || ENV["SKIP_BUN_INSTALL"]
21
+ end
22
+
23
+ module Jslinting
24
+ module Tasks
25
+ extend self
26
+
27
+ def lint_command
28
+ return "#{Jslinting.package_manager} run lint" if Jslinting.package_manager.present?
29
+
30
+ raise "jslinting-rails: No JavaScript package manager found"
31
+ end
32
+
33
+ def format_command
34
+ return "#{Jslinting.package_manager} run format" if Jslinting.package_manager.present?
35
+
36
+ raise "jslinting-rails: No JavaScript package manager found"
37
+ end
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jslinting-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Ethan Kircher
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-07-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 6.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 6.0.0
27
+ description:
28
+ email:
29
+ - ethanmichaelk@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - MIT-LICENSE
35
+ - README.md
36
+ - lib/install.rb
37
+ - lib/install/eslint/eslint.config.mjs
38
+ - lib/install/prettier/prettierrc.json
39
+ - lib/jslinting-rails.rb
40
+ - lib/jslinting/engine.rb
41
+ - lib/jslinting/version.rb
42
+ - lib/tasks/jslinting/install.rake
43
+ - lib/tasks/jslinting/lint.rake
44
+ homepage: https://github.com/rails/jsbundling-rails
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubygems_version: 3.5.9
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: Lint and format JavaScript in Rails with eslint and prettier
67
+ test_files: []