FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
hack-codegen/src/HackfmtFormatter.hack at main · onkeypress-llc/hack-codegen · GitHub
onkeypress-llc
/
hack-codegen
Public
forked from
hhvm/hack-codegen
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
hack-codegen
/
src
/
HackfmtFormatter.hack
Copy path
More file actions
More file actions
Latest commit
History
History
History
63 lines (50 loc) · 1.66 KB
Breadcrumbs
hack-codegen
/
src
/
HackfmtFormatter.hack
Copy path
File metadata and controls
63 lines (50 loc) · 1.66 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
namespace
Facebook\HackCodegen
;
use
namespace HH\Lib\{Str
,
Vec}
;
final
class
HackfmtFormatter
implements
ICodegenFormatter
{
public
function
__construct
(
private
IHackCodegenConfig
$config
) {}
public
function
format
(
string
$code
,
string
$_file_name
):
string
{
$output
=
vec
[];
$exit_code
=
null
;
$tempnam
=
\
tempnam
(\
sys_get_temp_dir
(),
'
hack-codegen-hackfmt
'
)
.
'
.hack
'
;
$options
=
$this
->
getFormattedOptions();
try
{
\
file_put_contents
(
$tempnam
,
$code
);
\
exec
(
'
hackfmt
'
.
$options
.
'
'
.
\
escapeshellarg
(
$tempnam
),
inout
$output
,
inout
$exit_code
,
);
}
finally
{
\
unlink
(
$tempnam
);
}
invariant
(
$exit_code
===
0
,
'
Failed to invoke hackfmt
'
);
return
Str
\
join
(
$output
,
"
\n
"
)
.
"
\n
"
;
}
<<
__Memoize
>>
private
function
getFormattedOptions
():
string
{
$options
=
vec
[
'
--indent-width
'
,
(
string
)
$this
->
config
->
getSpacesPerIndentation(),
'
--line-width
'
,
(
string
)
$this
->
config
->
getMaxLineLength(),
];
if
(
$this
->
config
->
shouldUseTabs()) {
$options
[]
=
'
--tabs
'
;
}
//
HHVM < 4.48 always formats generated code. HHVM 4.48 never does (so this
//
formatter is broken on that version). HHVM >= 4.49 formats generated code
//
iff the following flag is provided:
if
(\
version_compare
(\
HHVM_VERSION
,
'
4.49
'
)
>=
0
) {
$options
[]
=
'
--format-generated-code
'
;
}
return
Vec
\
map
(
$options
, \
escapeshellarg
<>
)
|>
Str
\
join
($$,
'
'
);
}
}
Back
|
FazBrowse Home
|
New Git URL