prettier 2.1.0 → 3.0.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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -6
  3. data/README.md +16 -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 +9 -23
  8. data/rubocop.yml +6 -6
  9. data/{dist/parser → src}/getInfo.js +0 -1
  10. data/{dist/parser → src}/netcat.js +0 -1
  11. data/src/parseSync.js +212 -0
  12. data/src/plugin.js +161 -0
  13. data/{dist/parser → src}/server.rb +45 -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,161 @@
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) {
85
+ return parseSync("ruby", text);
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) {
100
+ return parseSync("rbs", text);
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) {
115
+ return parseSync("haml", text);
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
+ defaultOptions: {
156
+ printWidth: 80,
157
+ tabWidth: 2
158
+ }
159
+ };
160
+
161
+ module.exports = plugin;
@@ -1,29 +1,28 @@
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"
12
8
 
13
- require_relative '../ruby/parser'
14
- require_relative '../rbs/parser'
15
- require_relative '../haml/parser'
9
+ require "syntax_tree"
10
+ require "syntax_tree/haml"
11
+ require "syntax_tree/rbs"
16
12
 
17
13
  # Make sure we trap these signals to be sure we get the quit command coming from
18
14
  # the parent node process
19
15
  quit = false
20
16
  trap(:INT) { quit = true }
21
17
  trap(:TERM) { quit = true }
22
- trap(:QUIT) { quit = true } if Signal.list.key?('QUIT')
18
+
19
+ if Signal.list.key?("QUIT") && RUBY_ENGINE != "jruby"
20
+ trap(:QUIT) { quit = true }
21
+ end
23
22
 
24
23
  # The information variable stores the actual connection information, which will
25
24
  # either be an IP address and port or a path to a unix socket file.
26
- information = ''
25
+ information = ""
27
26
 
28
27
  # The candidates array is a list of potential programs that could be used to
29
28
  # connect to our server. We'll run through them after the server starts to find
@@ -33,7 +32,7 @@ candidates = []
33
32
  if Gem.win_platform?
34
33
  # If we're on windows, we're going to start up a TCP server. The 0 here means
35
34
  # to bind to some available port.
36
- server = TCPServer.new('127.0.0.1', 0)
35
+ server = TCPServer.new("127.0.0.1", 0)
37
36
  address = server.local_address
38
37
 
39
38
  # Ensure that we close the server when this process exits.
@@ -55,7 +54,7 @@ else
55
54
  end
56
55
 
57
56
  information = server.local_address.unix_path
58
- candidates = ['nc -w 3 -U', 'ncat -w 3 -U']
57
+ candidates = ["nc -w 3 -U", "ncat -w 3 -U"]
59
58
  end
60
59
 
61
60
  # This is the actual listening thread that will be acting as our server. We have
@@ -69,26 +68,41 @@ listener =
69
68
 
70
69
  # Start up a new thread that will handle each successive connection.
71
70
  Thread.new(server.accept_nonblock) do |socket|
72
- parser, source = socket.read.force_encoding('UTF-8').split('|', 2)
71
+ parser, source = socket.read.force_encoding("UTF-8").split("|", 2)
72
+
73
+ source.each_line do |line|
74
+ case line
75
+ when /^\s*#.+?coding/
76
+ # If we've found an encoding comment, then we're going to take that
77
+ # into account and reclassify the encoding for the source.
78
+ encoding = Ripper.new(line).tap(&:parse).encoding
79
+ source = source.force_encoding(encoding)
80
+ break
81
+ when /^\s*#/
82
+ # continue
83
+ else
84
+ break
85
+ end
86
+ end
73
87
 
74
88
  response =
75
89
  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)
90
+ when "ping"
91
+ "pong"
92
+ when "ruby"
93
+ SyntaxTree.format(source)
94
+ when "rbs"
95
+ SyntaxTree::RBS.format(source)
96
+ when "haml"
97
+ SyntaxTree::Haml.format(source)
84
98
  end
85
99
 
86
100
  if response
87
- socket.write(JSON.fast_generate(response))
101
+ socket.write(JSON.fast_generate(response.force_encoding("UTF-8")))
88
102
  else
89
- socket.write('{ "error": true }')
103
+ socket.write("{ \"error\": true }")
90
104
  end
91
- rescue SyntaxTree::ParseError => error
105
+ rescue SyntaxTree::Parser::ParseError => error
92
106
  loc = { start: { line: error.lineno, column: error.column } }
93
107
  socket.write(JSON.fast_generate(error: error.message, loc: loc))
94
108
  rescue StandardError => error
@@ -118,9 +132,9 @@ candidates.map! do |candidate|
118
132
 
119
133
  # We do not care about stderr here, so throw it away
120
134
  stdout, _stderr, status =
121
- Open3.capture3("#{candidate} #{information}", stdin_data: 'ping')
135
+ Open3.capture3("#{candidate} #{information}", stdin_data: "ping")
122
136
 
123
- candidate if JSON.parse(stdout) == 'pong' && status.exitstatus == 0
137
+ candidate if JSON.parse(stdout) == "pong" && status.exitstatus == 0
124
138
  rescue StandardError
125
139
  # We don't actually care if this fails, because we'll just skip that
126
140
  # connection option.
@@ -136,7 +150,7 @@ prefix =
136
150
 
137
151
  # Default to running the netcat.js script that we ship with the plugin. It's a
138
152
  # good fallback as it will always work, but it is slower than the other options.
139
- prefix ||= "node #{File.expand_path('netcat.js', __dir__)}"
153
+ prefix ||= "node #{File.expand_path("netcat.js", __dir__)}"
140
154
 
141
155
  # Write out our connection information to the file given as the first argument
142
156
  # 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.0.0
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-05 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;