prettier 2.1.0 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -6
  3. data/README.md +17 -16
  4. data/exe/rbprettier +2 -2
  5. data/lib/prettier/rake/task.rb +5 -5
  6. data/lib/prettier.rb +11 -11
  7. data/package.json +11 -25
  8. data/rubocop.yml +32 -12
  9. data/{dist/parser → src}/getInfo.js +0 -1
  10. data/{dist/parser → src}/netcat.js +0 -1
  11. data/src/parseSync.js +216 -0
  12. data/src/plugin.js +170 -0
  13. data/{dist/parser → src}/server.rb +50 -31
  14. metadata +94 -78
  15. data/bin/console +0 -7
  16. data/dist/haml/embed.js +0 -53
  17. data/dist/haml/parser.js +0 -31
  18. data/dist/haml/parser.rb +0 -149
  19. data/dist/haml/printer.js +0 -336
  20. data/dist/parser/parseSync.js +0 -179
  21. data/dist/plugin.js +0 -143
  22. data/dist/prettier.js +0 -15
  23. data/dist/rbs/parser.js +0 -34
  24. data/dist/rbs/parser.rb +0 -155
  25. data/dist/rbs/printer.js +0 -525
  26. data/dist/ruby/embed.js +0 -115
  27. data/dist/ruby/location.js +0 -19
  28. data/dist/ruby/nodes/alias.js +0 -60
  29. data/dist/ruby/nodes/aref.js +0 -51
  30. data/dist/ruby/nodes/args.js +0 -138
  31. data/dist/ruby/nodes/arrays.js +0 -122
  32. data/dist/ruby/nodes/assign.js +0 -37
  33. data/dist/ruby/nodes/blocks.js +0 -90
  34. data/dist/ruby/nodes/calls.js +0 -263
  35. data/dist/ruby/nodes/case.js +0 -50
  36. data/dist/ruby/nodes/class.js +0 -54
  37. data/dist/ruby/nodes/commands.js +0 -138
  38. data/dist/ruby/nodes/conditionals.js +0 -246
  39. data/dist/ruby/nodes/constants.js +0 -35
  40. data/dist/ruby/nodes/flow.js +0 -59
  41. data/dist/ruby/nodes/hashes.js +0 -126
  42. data/dist/ruby/nodes/heredocs.js +0 -30
  43. data/dist/ruby/nodes/hooks.js +0 -35
  44. data/dist/ruby/nodes/ints.js +0 -27
  45. data/dist/ruby/nodes/lambdas.js +0 -70
  46. data/dist/ruby/nodes/loops.js +0 -75
  47. data/dist/ruby/nodes/massign.js +0 -60
  48. data/dist/ruby/nodes/methods.js +0 -50
  49. data/dist/ruby/nodes/operators.js +0 -68
  50. data/dist/ruby/nodes/params.js +0 -95
  51. data/dist/ruby/nodes/patterns.js +0 -119
  52. data/dist/ruby/nodes/regexp.js +0 -45
  53. data/dist/ruby/nodes/rescue.js +0 -86
  54. data/dist/ruby/nodes/return.js +0 -100
  55. data/dist/ruby/nodes/statements.js +0 -110
  56. data/dist/ruby/nodes/strings.js +0 -220
  57. data/dist/ruby/nodes/super.js +0 -26
  58. data/dist/ruby/nodes/undef.js +0 -31
  59. data/dist/ruby/nodes.js +0 -177
  60. data/dist/ruby/parser.js +0 -35
  61. data/dist/ruby/parser.rb +0 -9134
  62. data/dist/ruby/printer.js +0 -67
  63. data/dist/ruby/toProc.js +0 -91
  64. data/dist/types/haml.js +0 -4
  65. data/dist/types/plugin.js +0 -3
  66. data/dist/types/rbs.js +0 -4
  67. data/dist/types/ruby.js +0 -4
  68. data/dist/types/utils.js +0 -2
  69. data/dist/types.js +0 -34
  70. data/dist/utils/containsAssignment.js +0 -18
  71. data/dist/utils/getChildNodes.js +0 -305
  72. data/dist/utils/getTrailingComma.js +0 -6
  73. data/dist/utils/hasAncestor.js +0 -15
  74. data/dist/utils/inlineEnsureParens.js +0 -49
  75. data/dist/utils/isEmptyBodyStmt.js +0 -10
  76. data/dist/utils/isEmptyParams.js +0 -12
  77. data/dist/utils/isEmptyStmts.js +0 -10
  78. data/dist/utils/literal.js +0 -8
  79. data/dist/utils/literallineWithoutBreakParent.js +0 -8
  80. data/dist/utils/makeCall.js +0 -14
  81. data/dist/utils/noIndent.js +0 -11
  82. data/dist/utils/printEmptyCollection.js +0 -46
  83. data/dist/utils/skipAssignIndent.js +0 -19
  84. data/dist/utils.js +0 -32
data/src/plugin.js ADDED
@@ -0,0 +1,170 @@
1
+ const { parseSync } = require("./parseSync");
2
+
3
+ /*
4
+ * metadata mostly pulled from linguist and rubocop:
5
+ * https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
6
+ * https://github.com/rubocop/rubocop/blob/master/spec/rubocop/target_finder_spec.rb
7
+ */
8
+ const plugin = {
9
+ languages: [
10
+ {
11
+ name: "Ruby",
12
+ parsers: ["ruby"],
13
+ extensions: [
14
+ ".arb",
15
+ ".axlsx",
16
+ ".builder",
17
+ ".eye",
18
+ ".fcgi",
19
+ ".gemfile",
20
+ ".gemspec",
21
+ ".god",
22
+ ".jb",
23
+ ".jbuilder",
24
+ ".mspec",
25
+ ".opal",
26
+ ".pluginspec",
27
+ ".podspec",
28
+ ".rabl",
29
+ ".rake",
30
+ ".rb",
31
+ ".rbi",
32
+ ".rbuild",
33
+ ".rbw",
34
+ ".rbx",
35
+ ".ru",
36
+ ".ruby",
37
+ ".thor",
38
+ ".watchr"
39
+ ],
40
+ filenames: [
41
+ ".irbrc",
42
+ ".pryrc",
43
+ ".simplecov",
44
+ "Appraisals",
45
+ "Berksfile",
46
+ "Brewfile",
47
+ "Buildfile",
48
+ "Capfile",
49
+ "Cheffile",
50
+ "Dangerfile",
51
+ "Deliverfile",
52
+ "Fastfile",
53
+ "Gemfile",
54
+ "Guardfile",
55
+ "Jarfile",
56
+ "Mavenfile",
57
+ "Podfile",
58
+ "Puppetfile",
59
+ "Rakefile",
60
+ "Snapfile",
61
+ "Thorfile",
62
+ "Vagabondfile",
63
+ "Vagrantfile",
64
+ "buildfile"
65
+ ],
66
+ interpreters: ["jruby", "macruby", "rake", "rbx", "ruby"],
67
+ linguistLanguageId: 326,
68
+ vscodeLanguageIds: ["ruby"]
69
+ },
70
+ {
71
+ name: "RBS",
72
+ parsers: ["rbs"],
73
+ extensions: [".rbs"]
74
+ },
75
+ {
76
+ name: "HAML",
77
+ parsers: ["haml"],
78
+ extensions: [".haml"],
79
+ vscodeLanguageIds: ["haml"]
80
+ }
81
+ ],
82
+ parsers: {
83
+ ruby: {
84
+ parse(text, _parsers, opts) {
85
+ return parseSync("ruby", text, opts);
86
+ },
87
+ astFormat: "ruby",
88
+ hasPragma(text) {
89
+ return /^\s*#[^\S\n]*@(?:prettier|format)\s*?(?:\n|$)/m.test(text);
90
+ },
91
+ locStart() {
92
+ return 0;
93
+ },
94
+ locEnd() {
95
+ return 0;
96
+ }
97
+ },
98
+ rbs: {
99
+ parse(text, _parsers, opts) {
100
+ return parseSync("rbs", text, opts);
101
+ },
102
+ astFormat: "rbs",
103
+ hasPragma(text) {
104
+ return /^\s*#[^\S\n]*@(prettier|format)\s*(\n|$)/.test(text);
105
+ },
106
+ locStart() {
107
+ return 0;
108
+ },
109
+ locEnd() {
110
+ return 0;
111
+ }
112
+ },
113
+ haml: {
114
+ parse(text, _parsers, opts) {
115
+ return parseSync("haml", text, opts);
116
+ },
117
+ astFormat: "haml",
118
+ hasPragma(text) {
119
+ return /^\s*-#\s*@(prettier|format)/.test(text);
120
+ },
121
+ locStart() {
122
+ return 0;
123
+ },
124
+ locEnd() {
125
+ return 0;
126
+ }
127
+ }
128
+ },
129
+ printers: {
130
+ ruby: {
131
+ print(path) {
132
+ return path.getValue();
133
+ },
134
+ insertPragma(text) {
135
+ return `# @format${text.startsWith("#") ? "\n" : "\n\n"}${text}`;
136
+ }
137
+ },
138
+ rbs: {
139
+ print(path) {
140
+ return path.getValue();
141
+ },
142
+ insertPragma(text) {
143
+ return `# @format${text.startsWith("#") ? "\n" : "\n\n"}${text}`;
144
+ }
145
+ },
146
+ haml: {
147
+ print(path) {
148
+ return path.getValue();
149
+ },
150
+ insertPragma(text) {
151
+ return `-# @format${text.startsWith("-#") ? "\n" : "\n\n"}${text}`;
152
+ }
153
+ }
154
+ },
155
+ options: {
156
+ rubyPlugins: {
157
+ type: "string",
158
+ category: "Ruby",
159
+ default: "",
160
+ description: "The comma-separated list of plugins to require",
161
+ since: "3.1.0"
162
+ }
163
+ },
164
+ defaultOptions: {
165
+ printWidth: 80,
166
+ tabWidth: 2
167
+ }
168
+ };
169
+
170
+ module.exports = plugin;
@@ -1,29 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler/setup' if ENV['PLUGIN_RUBY_CI']
4
- require 'socket'
5
- require 'json'
6
- require 'fileutils'
7
- require 'open3'
8
-
9
- # Ensure the parent module is defined before requiring the parsers.
10
- module Prettier
11
- end
3
+ require "bundler/setup"
4
+ require "socket"
5
+ require "json"
6
+ require "fileutils"
7
+ require "open3"
8
+
9
+ require "syntax_tree"
10
+ require "syntax_tree/haml"
11
+ require "syntax_tree/rbs"
12
12
 
13
- require_relative '../ruby/parser'
14
- require_relative '../rbs/parser'
15
- require_relative '../haml/parser'
13
+ # First, require all of the plugins that the user specified.
14
+ ARGV.shift[/^--plugins=(.*)$/, 1]
15
+ .split(",")
16
+ .each { |plugin| require "syntax_tree/#{plugin}" }
16
17
 
17
18
  # Make sure we trap these signals to be sure we get the quit command coming from
18
19
  # the parent node process
19
20
  quit = false
20
21
  trap(:INT) { quit = true }
21
22
  trap(:TERM) { quit = true }
22
- trap(:QUIT) { quit = true } if Signal.list.key?('QUIT')
23
+
24
+ if Signal.list.key?("QUIT") && RUBY_ENGINE != "jruby"
25
+ trap(:QUIT) { quit = true }
26
+ end
23
27
 
24
28
  # The information variable stores the actual connection information, which will
25
29
  # either be an IP address and port or a path to a unix socket file.
26
- information = ''
30
+ information = ""
27
31
 
28
32
  # The candidates array is a list of potential programs that could be used to
29
33
  # connect to our server. We'll run through them after the server starts to find
@@ -33,7 +37,7 @@ candidates = []
33
37
  if Gem.win_platform?
34
38
  # If we're on windows, we're going to start up a TCP server. The 0 here means
35
39
  # to bind to some available port.
36
- server = TCPServer.new('127.0.0.1', 0)
40
+ server = TCPServer.new("127.0.0.1", 0)
37
41
  address = server.local_address
38
42
 
39
43
  # Ensure that we close the server when this process exits.
@@ -55,7 +59,7 @@ else
55
59
  end
56
60
 
57
61
  information = server.local_address.unix_path
58
- candidates = ['nc -w 3 -U', 'ncat -w 3 -U']
62
+ candidates = ["nc -w 3 -U", "ncat -w 3 -U"]
59
63
  end
60
64
 
61
65
  # This is the actual listening thread that will be acting as our server. We have
@@ -69,26 +73,41 @@ listener =
69
73
 
70
74
  # Start up a new thread that will handle each successive connection.
71
75
  Thread.new(server.accept_nonblock) do |socket|
72
- parser, source = socket.read.force_encoding('UTF-8').split('|', 2)
76
+ parser, source = socket.read.force_encoding("UTF-8").split("|", 2)
77
+
78
+ source.each_line do |line|
79
+ case line
80
+ when /^\s*#.+?coding/
81
+ # If we've found an encoding comment, then we're going to take that
82
+ # into account and reclassify the encoding for the source.
83
+ encoding = Ripper.new(line).tap(&:parse).encoding
84
+ source = source.force_encoding(encoding)
85
+ break
86
+ when /^\s*#/
87
+ # continue
88
+ else
89
+ break
90
+ end
91
+ end
73
92
 
74
93
  response =
75
94
  case parser
76
- when 'ping'
77
- 'pong'
78
- when 'ruby'
79
- SyntaxTree.parse(source)
80
- when 'rbs'
81
- Prettier::RBSParser.parse(source)
82
- when 'haml'
83
- Prettier::HAMLParser.parse(source)
95
+ when "ping"
96
+ "pong"
97
+ when "ruby"
98
+ SyntaxTree.format(source)
99
+ when "rbs"
100
+ SyntaxTree::RBS.format(source)
101
+ when "haml"
102
+ SyntaxTree::Haml.format(source)
84
103
  end
85
104
 
86
105
  if response
87
- socket.write(JSON.fast_generate(response))
106
+ socket.write(JSON.fast_generate(response.force_encoding("UTF-8")))
88
107
  else
89
- socket.write('{ "error": true }')
108
+ socket.write("{ \"error\": true }")
90
109
  end
91
- rescue SyntaxTree::ParseError => error
110
+ rescue SyntaxTree::Parser::ParseError => error
92
111
  loc = { start: { line: error.lineno, column: error.column } }
93
112
  socket.write(JSON.fast_generate(error: error.message, loc: loc))
94
113
  rescue StandardError => error
@@ -118,9 +137,9 @@ candidates.map! do |candidate|
118
137
 
119
138
  # We do not care about stderr here, so throw it away
120
139
  stdout, _stderr, status =
121
- Open3.capture3("#{candidate} #{information}", stdin_data: 'ping')
140
+ Open3.capture3("#{candidate} #{information}", stdin_data: "ping")
122
141
 
123
- candidate if JSON.parse(stdout) == 'pong' && status.exitstatus == 0
142
+ candidate if JSON.parse(stdout) == "pong" && status.exitstatus == 0
124
143
  rescue StandardError
125
144
  # We don't actually care if this fails, because we'll just skip that
126
145
  # connection option.
@@ -136,7 +155,7 @@ prefix =
136
155
 
137
156
  # Default to running the netcat.js script that we ship with the plugin. It's a
138
157
  # good fallback as it will always work, but it is slower than the other options.
139
- prefix ||= "node #{File.expand_path('netcat.js', __dir__)}"
158
+ prefix ||= "node #{File.expand_path("netcat.js", __dir__)}"
140
159
 
141
160
  # Write out our connection information to the file given as the first argument
142
161
  # to this script.
metadata CHANGED
@@ -1,15 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prettier
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Newton
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-05 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-05-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: syntax_tree
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.3.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.3.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: syntax_tree-haml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: syntax_tree-rbs
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
13
97
  description:
14
98
  email:
15
99
  executables:
@@ -22,79 +106,6 @@ files:
22
106
  - CONTRIBUTING.md
23
107
  - LICENSE
24
108
  - README.md
25
- - bin/console
26
- - dist/haml/embed.js
27
- - dist/haml/parser.js
28
- - dist/haml/parser.rb
29
- - dist/haml/printer.js
30
- - dist/parser/getInfo.js
31
- - dist/parser/netcat.js
32
- - dist/parser/parseSync.js
33
- - dist/parser/server.rb
34
- - dist/plugin.js
35
- - dist/prettier.js
36
- - dist/rbs/parser.js
37
- - dist/rbs/parser.rb
38
- - dist/rbs/printer.js
39
- - dist/ruby/embed.js
40
- - dist/ruby/location.js
41
- - dist/ruby/nodes.js
42
- - dist/ruby/nodes/alias.js
43
- - dist/ruby/nodes/aref.js
44
- - dist/ruby/nodes/args.js
45
- - dist/ruby/nodes/arrays.js
46
- - dist/ruby/nodes/assign.js
47
- - dist/ruby/nodes/blocks.js
48
- - dist/ruby/nodes/calls.js
49
- - dist/ruby/nodes/case.js
50
- - dist/ruby/nodes/class.js
51
- - dist/ruby/nodes/commands.js
52
- - dist/ruby/nodes/conditionals.js
53
- - dist/ruby/nodes/constants.js
54
- - dist/ruby/nodes/flow.js
55
- - dist/ruby/nodes/hashes.js
56
- - dist/ruby/nodes/heredocs.js
57
- - dist/ruby/nodes/hooks.js
58
- - dist/ruby/nodes/ints.js
59
- - dist/ruby/nodes/lambdas.js
60
- - dist/ruby/nodes/loops.js
61
- - dist/ruby/nodes/massign.js
62
- - dist/ruby/nodes/methods.js
63
- - dist/ruby/nodes/operators.js
64
- - dist/ruby/nodes/params.js
65
- - dist/ruby/nodes/patterns.js
66
- - dist/ruby/nodes/regexp.js
67
- - dist/ruby/nodes/rescue.js
68
- - dist/ruby/nodes/return.js
69
- - dist/ruby/nodes/statements.js
70
- - dist/ruby/nodes/strings.js
71
- - dist/ruby/nodes/super.js
72
- - dist/ruby/nodes/undef.js
73
- - dist/ruby/parser.js
74
- - dist/ruby/parser.rb
75
- - dist/ruby/printer.js
76
- - dist/ruby/toProc.js
77
- - dist/types.js
78
- - dist/types/haml.js
79
- - dist/types/plugin.js
80
- - dist/types/rbs.js
81
- - dist/types/ruby.js
82
- - dist/types/utils.js
83
- - dist/utils.js
84
- - dist/utils/containsAssignment.js
85
- - dist/utils/getChildNodes.js
86
- - dist/utils/getTrailingComma.js
87
- - dist/utils/hasAncestor.js
88
- - dist/utils/inlineEnsureParens.js
89
- - dist/utils/isEmptyBodyStmt.js
90
- - dist/utils/isEmptyParams.js
91
- - dist/utils/isEmptyStmts.js
92
- - dist/utils/literal.js
93
- - dist/utils/literallineWithoutBreakParent.js
94
- - dist/utils/makeCall.js
95
- - dist/utils/noIndent.js
96
- - dist/utils/printEmptyCollection.js
97
- - dist/utils/skipAssignIndent.js
98
109
  - exe/rbprettier
99
110
  - lib/prettier.rb
100
111
  - lib/prettier/rake/task.rb
@@ -118,6 +129,11 @@ files:
118
129
  - node_modules/prettier/third-party.js
119
130
  - package.json
120
131
  - rubocop.yml
132
+ - src/getInfo.js
133
+ - src/netcat.js
134
+ - src/parseSync.js
135
+ - src/plugin.js
136
+ - src/server.rb
121
137
  homepage: https://github.com/prettier/plugin-ruby#readme
122
138
  licenses:
123
139
  - MIT
@@ -130,14 +146,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
146
  requirements:
131
147
  - - ">="
132
148
  - !ruby/object:Gem::Version
133
- version: '0'
149
+ version: 2.7.3
134
150
  required_rubygems_version: !ruby/object:Gem::Requirement
135
151
  requirements:
136
152
  - - ">="
137
153
  - !ruby/object:Gem::Version
138
154
  version: '0'
139
155
  requirements: []
140
- rubygems_version: 3.3.3
156
+ rubygems_version: 3.4.0.dev
141
157
  signing_key:
142
158
  specification_version: 4
143
159
  summary: prettier plugin for the Ruby programming language
data/bin/console DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'prettier'
5
-
6
- require 'irb'
7
- IRB.start(__FILE__)
data/dist/haml/embed.js DELETED
@@ -1,53 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const prettier_1 = __importDefault(require("../prettier"));
7
- const { hardline, indent, literalline, markAsRoot, mapDoc, stripTrailingHardline } = prettier_1.default;
8
- // This function is in here because it handles embedded parser values. I don't
9
- // have a test that exercises it because I'm not sure for which parser it is
10
- // necessary, but since it's in prettier core I'm keeping it here.
11
- /* istanbul ignore next */
12
- function replaceNewlines(doc) {
13
- return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" && currentDoc.includes("\n")
14
- ? currentDoc.split(/(\n)/g).map((v, i) => (i % 2 === 0 ? v : literalline))
15
- : currentDoc);
16
- }
17
- const embed = (path, _print, textToDoc, opts) => {
18
- const node = path.getValue();
19
- // We're only going to embed other languages on filter nodes.
20
- if (node.type !== "filter") {
21
- return null;
22
- }
23
- let parser = node.value.name;
24
- // We don't want to deal with some weird recursive parser situation, so we
25
- // need to explicitly call out the HAML parser here and just return null.
26
- if (parser === "haml") {
27
- return null;
28
- }
29
- // In HAML the name of the JS filter is :javascript, whereas in prettier the
30
- // name of the JS parser is babel. Here we explicitly handle that conversion.
31
- if (parser === "javascript") {
32
- parser = "babel";
33
- }
34
- // If there aren't any plugins that look like the name of the filter, then we
35
- // will just exit early.
36
- if (!opts.plugins.some((plugin) => typeof plugin !== "string" &&
37
- plugin.parsers &&
38
- Object.prototype.hasOwnProperty.call(plugin.parsers, parser))) {
39
- return null;
40
- }
41
- // If there is a plugin that has a parser that matches the name of this
42
- // filter, then we're going to assume that's correct for embedding and go
43
- // ahead and switch to that parser.
44
- return markAsRoot([
45
- ":",
46
- node.value.name,
47
- indent([
48
- hardline,
49
- replaceNewlines(stripTrailingHardline(textToDoc(node.value.text, { parser })))
50
- ])
51
- ]);
52
- };
53
- exports.default = embed;
data/dist/haml/parser.js DELETED
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const parseSync_1 = __importDefault(require("../parser/parseSync"));
7
- const parser = {
8
- // This function is responsible for taking an input string of text and
9
- // returning to prettier a JavaScript object that is the equivalent AST that
10
- // represents the code stored in that string. We accomplish this by spawning a
11
- // new process and reading JSON off STDOUT.
12
- parse(text) {
13
- return (0, parseSync_1.default)("haml", text);
14
- },
15
- astFormat: "haml",
16
- // This function handles checking whether or not the source string has the
17
- // pragma for prettier. This is an optional workflow for incremental adoption.
18
- hasPragma(text) {
19
- return /^\s*-#\s*@(prettier|format)/.test(text);
20
- },
21
- // These functions are just placeholders until we can actually perform this
22
- // properly. The functions are necessary otherwise the format with cursor
23
- // functions break.
24
- locStart() {
25
- return 0;
26
- },
27
- locEnd() {
28
- return 0;
29
- }
30
- };
31
- exports.default = parser;