prettier 2.0.0 → 3.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +52 -6
- data/README.md +17 -16
- data/exe/rbprettier +2 -2
- data/lib/prettier/rake/task.rb +5 -5
- data/lib/prettier.rb +12 -11
- data/node_modules/prettier/bin-prettier.js +48 -18924
- data/node_modules/prettier/cli.js +12335 -0
- data/node_modules/prettier/doc.js +1306 -4755
- data/node_modules/prettier/index.js +37468 -57614
- data/node_modules/prettier/package.json +3 -2
- data/node_modules/prettier/parser-angular.js +2 -66
- data/node_modules/prettier/parser-babel.js +27 -22
- data/node_modules/prettier/parser-espree.js +26 -22
- data/node_modules/prettier/parser-flow.js +26 -22
- data/node_modules/prettier/parser-glimmer.js +27 -1
- data/node_modules/prettier/parser-graphql.js +15 -1
- data/node_modules/prettier/parser-html.js +21 -117
- data/node_modules/prettier/parser-markdown.js +61 -19
- data/node_modules/prettier/parser-meriyah.js +19 -22
- data/node_modules/prettier/parser-postcss.js +76 -22
- data/node_modules/prettier/parser-typescript.js +280 -22
- data/node_modules/prettier/parser-yaml.js +150 -15
- data/node_modules/prettier/third-party.js +8660 -11030
- data/package.json +11 -25
- data/rubocop.yml +6 -6
- data/src/getInfo.js +23 -0
- data/{dist/parser → src}/netcat.js +0 -1
- data/src/parseSync.js +216 -0
- data/src/plugin.js +170 -0
- data/{dist/parser → src}/server.rb +50 -27
- metadata +95 -75
- data/bin/console +0 -7
- data/dist/haml/embed.js +0 -53
- data/dist/haml/parser.js +0 -31
- data/dist/haml/parser.rb +0 -143
- data/dist/haml/printer.js +0 -336
- data/dist/parser/getInfo.js +0 -17
- data/dist/parser/parseSync.js +0 -179
- data/dist/plugin.js +0 -143
- data/dist/prettier.js +0 -15
- data/dist/rbs/parser.js +0 -34
- data/dist/rbs/parser.rb +0 -98
- data/dist/rbs/printer.js +0 -517
- data/dist/ruby/embed.js +0 -110
- data/dist/ruby/nodes/alias.js +0 -59
- data/dist/ruby/nodes/aref.js +0 -53
- data/dist/ruby/nodes/args.js +0 -165
- data/dist/ruby/nodes/arrays.js +0 -126
- data/dist/ruby/nodes/assign.js +0 -41
- data/dist/ruby/nodes/blocks.js +0 -87
- data/dist/ruby/nodes/calls.js +0 -260
- data/dist/ruby/nodes/case.js +0 -50
- data/dist/ruby/nodes/class.js +0 -54
- data/dist/ruby/nodes/commands.js +0 -124
- data/dist/ruby/nodes/conditionals.js +0 -242
- data/dist/ruby/nodes/constants.js +0 -38
- data/dist/ruby/nodes/flow.js +0 -66
- data/dist/ruby/nodes/hashes.js +0 -130
- data/dist/ruby/nodes/heredocs.js +0 -30
- data/dist/ruby/nodes/hooks.js +0 -35
- data/dist/ruby/nodes/ints.js +0 -27
- data/dist/ruby/nodes/lambdas.js +0 -69
- data/dist/ruby/nodes/loops.js +0 -73
- data/dist/ruby/nodes/massign.js +0 -73
- data/dist/ruby/nodes/methods.js +0 -70
- data/dist/ruby/nodes/operators.js +0 -70
- data/dist/ruby/nodes/params.js +0 -89
- data/dist/ruby/nodes/patterns.js +0 -122
- data/dist/ruby/nodes/regexp.js +0 -45
- data/dist/ruby/nodes/rescue.js +0 -85
- data/dist/ruby/nodes/return.js +0 -75
- data/dist/ruby/nodes/statements.js +0 -111
- data/dist/ruby/nodes/strings.js +0 -218
- data/dist/ruby/nodes/super.js +0 -30
- data/dist/ruby/nodes/undef.js +0 -26
- data/dist/ruby/nodes.js +0 -151
- data/dist/ruby/parser.js +0 -34
- data/dist/ruby/parser.rb +0 -3636
- data/dist/ruby/printer.js +0 -129
- data/dist/ruby/toProc.js +0 -93
- data/dist/types/haml.js +0 -4
- data/dist/types/plugin.js +0 -3
- data/dist/types/rbs.js +0 -4
- data/dist/types/ruby.js +0 -4
- data/dist/types/utils.js +0 -2
- data/dist/types.js +0 -30
- data/dist/utils/containsAssignment.js +0 -15
- data/dist/utils/getTrailingComma.js +0 -6
- data/dist/utils/hasAncestor.js +0 -15
- data/dist/utils/inlineEnsureParens.js +0 -49
- data/dist/utils/isEmptyBodyStmt.js +0 -10
- data/dist/utils/isEmptyStmts.js +0 -10
- data/dist/utils/literal.js +0 -8
- data/dist/utils/literallineWithoutBreakParent.js +0 -8
- data/dist/utils/makeCall.js +0 -13
- data/dist/utils/noIndent.js +0 -11
- data/dist/utils/printEmptyCollection.js +0 -44
- data/dist/utils/skipAssignIndent.js +0 -15
- data/dist/utils.js +0 -30
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:
|
4
|
+
version: 3.1.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:
|
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,80 +106,11 @@ 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/nodes.js
|
41
|
-
- dist/ruby/nodes/alias.js
|
42
|
-
- dist/ruby/nodes/aref.js
|
43
|
-
- dist/ruby/nodes/args.js
|
44
|
-
- dist/ruby/nodes/arrays.js
|
45
|
-
- dist/ruby/nodes/assign.js
|
46
|
-
- dist/ruby/nodes/blocks.js
|
47
|
-
- dist/ruby/nodes/calls.js
|
48
|
-
- dist/ruby/nodes/case.js
|
49
|
-
- dist/ruby/nodes/class.js
|
50
|
-
- dist/ruby/nodes/commands.js
|
51
|
-
- dist/ruby/nodes/conditionals.js
|
52
|
-
- dist/ruby/nodes/constants.js
|
53
|
-
- dist/ruby/nodes/flow.js
|
54
|
-
- dist/ruby/nodes/hashes.js
|
55
|
-
- dist/ruby/nodes/heredocs.js
|
56
|
-
- dist/ruby/nodes/hooks.js
|
57
|
-
- dist/ruby/nodes/ints.js
|
58
|
-
- dist/ruby/nodes/lambdas.js
|
59
|
-
- dist/ruby/nodes/loops.js
|
60
|
-
- dist/ruby/nodes/massign.js
|
61
|
-
- dist/ruby/nodes/methods.js
|
62
|
-
- dist/ruby/nodes/operators.js
|
63
|
-
- dist/ruby/nodes/params.js
|
64
|
-
- dist/ruby/nodes/patterns.js
|
65
|
-
- dist/ruby/nodes/regexp.js
|
66
|
-
- dist/ruby/nodes/rescue.js
|
67
|
-
- dist/ruby/nodes/return.js
|
68
|
-
- dist/ruby/nodes/statements.js
|
69
|
-
- dist/ruby/nodes/strings.js
|
70
|
-
- dist/ruby/nodes/super.js
|
71
|
-
- dist/ruby/nodes/undef.js
|
72
|
-
- dist/ruby/parser.js
|
73
|
-
- dist/ruby/parser.rb
|
74
|
-
- dist/ruby/printer.js
|
75
|
-
- dist/ruby/toProc.js
|
76
|
-
- dist/types.js
|
77
|
-
- dist/types/haml.js
|
78
|
-
- dist/types/plugin.js
|
79
|
-
- dist/types/rbs.js
|
80
|
-
- dist/types/ruby.js
|
81
|
-
- dist/types/utils.js
|
82
|
-
- dist/utils.js
|
83
|
-
- dist/utils/containsAssignment.js
|
84
|
-
- dist/utils/getTrailingComma.js
|
85
|
-
- dist/utils/hasAncestor.js
|
86
|
-
- dist/utils/inlineEnsureParens.js
|
87
|
-
- dist/utils/isEmptyBodyStmt.js
|
88
|
-
- dist/utils/isEmptyStmts.js
|
89
|
-
- dist/utils/literal.js
|
90
|
-
- dist/utils/literallineWithoutBreakParent.js
|
91
|
-
- dist/utils/makeCall.js
|
92
|
-
- dist/utils/noIndent.js
|
93
|
-
- dist/utils/printEmptyCollection.js
|
94
|
-
- dist/utils/skipAssignIndent.js
|
95
109
|
- exe/rbprettier
|
96
110
|
- lib/prettier.rb
|
97
111
|
- lib/prettier/rake/task.rb
|
98
112
|
- node_modules/prettier/bin-prettier.js
|
113
|
+
- node_modules/prettier/cli.js
|
99
114
|
- node_modules/prettier/doc.js
|
100
115
|
- node_modules/prettier/index.js
|
101
116
|
- node_modules/prettier/package.json
|
@@ -114,6 +129,11 @@ files:
|
|
114
129
|
- node_modules/prettier/third-party.js
|
115
130
|
- package.json
|
116
131
|
- rubocop.yml
|
132
|
+
- src/getInfo.js
|
133
|
+
- src/netcat.js
|
134
|
+
- src/parseSync.js
|
135
|
+
- src/plugin.js
|
136
|
+
- src/server.rb
|
117
137
|
homepage: https://github.com/prettier/plugin-ruby#readme
|
118
138
|
licenses:
|
119
139
|
- MIT
|
@@ -126,14 +146,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
146
|
requirements:
|
127
147
|
- - ">="
|
128
148
|
- !ruby/object:Gem::Version
|
129
|
-
version:
|
149
|
+
version: 2.7.3
|
130
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
151
|
requirements:
|
132
152
|
- - ">="
|
133
153
|
- !ruby/object:Gem::Version
|
134
154
|
version: '0'
|
135
155
|
requirements: []
|
136
|
-
rubygems_version: 3.
|
156
|
+
rubygems_version: 3.4.0.dev
|
137
157
|
signing_key:
|
138
158
|
specification_version: 4
|
139
159
|
summary: prettier plugin for the Ruby programming language
|
data/bin/console
DELETED
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;
|
data/dist/haml/parser.rb
DELETED
@@ -1,143 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'ripper'
|
4
|
-
|
5
|
-
begin
|
6
|
-
require 'haml'
|
7
|
-
rescue LoadError
|
8
|
-
# If we can't load the haml gem, then we're going to provide a shim parser
|
9
|
-
# that will warn and bail out.
|
10
|
-
class Prettier::HAMLParser
|
11
|
-
def self.parse(text)
|
12
|
-
warn(
|
13
|
-
'The `haml` gem could not be loaded. Please ensure you have it ' \
|
14
|
-
'installed and that it is available in the gem path.'
|
15
|
-
)
|
16
|
-
|
17
|
-
false
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
return
|
22
|
-
end
|
23
|
-
|
24
|
-
class Haml::Parser::ParseNode
|
25
|
-
class DeepAttributeParser
|
26
|
-
def parse(string)
|
27
|
-
Haml::AttributeParser.available? ? parse_value(string) : string
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def literal(string, level)
|
33
|
-
level == 0 ? string : "&#{string}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def parse_value(string, level = 0)
|
37
|
-
response = Ripper.sexp(string)
|
38
|
-
return literal(string, level) unless response
|
39
|
-
|
40
|
-
case response[1][0][0]
|
41
|
-
when :hash
|
42
|
-
hash = Haml::AttributeParser.parse(string)
|
43
|
-
|
44
|
-
if hash
|
45
|
-
# Explicitly not using Enumerable#to_h here to support Ruby 2.5
|
46
|
-
hash.each_with_object({}) do |(key, value), response|
|
47
|
-
response[key] = parse_value(value, level + 1)
|
48
|
-
end
|
49
|
-
else
|
50
|
-
literal(string, level)
|
51
|
-
end
|
52
|
-
when :string_literal
|
53
|
-
string[1...-1]
|
54
|
-
else
|
55
|
-
literal(string, level)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
ESCAPE = /Haml::Helpers.html_escape\(\((.+)\)\)/.freeze
|
61
|
-
|
62
|
-
# If a node comes in as the plain type but starts with one of the special
|
63
|
-
# characters that haml parses, then we need to escape it with a \ when
|
64
|
-
# printing. So here we make a regexp pattern to check if the node needs to be
|
65
|
-
# escaped.
|
66
|
-
special_chars =
|
67
|
-
Haml::Parser::SPECIAL_CHARACTERS.map { |char| Regexp.escape(char) }
|
68
|
-
|
69
|
-
SPECIAL_START = /\A(?:#{special_chars.join('|')})/
|
70
|
-
|
71
|
-
def as_json
|
72
|
-
case type
|
73
|
-
when :comment, :doctype, :silent_script
|
74
|
-
to_h.tap do |json|
|
75
|
-
json.delete(:parent)
|
76
|
-
json[:children] = children.map(&:as_json)
|
77
|
-
end
|
78
|
-
when :filter, :haml_comment
|
79
|
-
to_h.tap { |json| json.delete(:parent) }
|
80
|
-
when :plain
|
81
|
-
to_h.tap do |json|
|
82
|
-
json.delete(:parent)
|
83
|
-
json[:children] = children.map(&:as_json)
|
84
|
-
|
85
|
-
text = json[:value][:text]
|
86
|
-
json[:value][:text] = "\\#{text}" if text.match?(SPECIAL_START)
|
87
|
-
end
|
88
|
-
when :root
|
89
|
-
to_h.tap do |json|
|
90
|
-
json[:children] = children.map(&:as_json)
|
91
|
-
|
92
|
-
# We need this information in the printer to know how to lay out
|
93
|
-
# multi-line attributes.
|
94
|
-
json[:supports_multiline] =
|
95
|
-
Gem::Version.new(Haml::VERSION) >= Gem::Version.new('5.2')
|
96
|
-
end
|
97
|
-
when :script
|
98
|
-
to_h.tap do |json|
|
99
|
-
json.delete(:parent)
|
100
|
-
json[:children] = children.map(&:as_json)
|
101
|
-
|
102
|
-
if json[:value][:text].match?(ESCAPE)
|
103
|
-
json[:value][:text].gsub!(ESCAPE) { $1 }
|
104
|
-
json[:value].merge!(escape_html: 'escape_html', interpolate: true)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
when :tag
|
108
|
-
to_h.tap do |json|
|
109
|
-
json.delete(:parent)
|
110
|
-
|
111
|
-
# For some reason this is actually using a symbol to represent a null
|
112
|
-
# object ref instead of nil itself, so just replacing it here for
|
113
|
-
# simplicity in the printer
|
114
|
-
json[:value][:object_ref] = nil if json[:value][:object_ref] == :nil
|
115
|
-
|
116
|
-
# Get a reference to the dynamic attributes hash
|
117
|
-
dynamic_attributes = value[:dynamic_attributes].to_h
|
118
|
-
|
119
|
-
# If we have any in the old style, then we're going to pass it through
|
120
|
-
# the deep attribute parser filter.
|
121
|
-
if dynamic_attributes[:old]
|
122
|
-
dynamic_attributes[:old] =
|
123
|
-
DeepAttributeParser.new.parse(dynamic_attributes[:old])
|
124
|
-
end
|
125
|
-
|
126
|
-
json.merge!(
|
127
|
-
children: children.map(&:as_json),
|
128
|
-
value: value.merge(dynamic_attributes: dynamic_attributes)
|
129
|
-
)
|
130
|
-
end
|
131
|
-
else
|
132
|
-
raise ArgumentError, "Unsupported type: #{type}"
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
module Prettier
|
138
|
-
class HAMLParser
|
139
|
-
def self.parse(source)
|
140
|
-
Haml::Parser.new({}).call(source).as_json
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|