mirror of
https://github.com/vale981/apheleia
synced 2025-03-04 09:01:42 -05:00
Add ruby-syntax-tree format support (#224)
Add [ruby-syntax-tree](https://github.com/ruby-syntax-tree/syntax_tree) as an available formatter. Include support for finding a [`.streerc` file](https://github.com/ruby-syntax-tree/syntax_tree#configuration). --------- Co-authored-by: Radon Rosborough <radon@intuitiveexplanations.com>
This commit is contained in:
parent
3aa747856a
commit
93f7480c96
7 changed files with 90 additions and 23 deletions
|
@ -89,7 +89,8 @@
|
||||||
(lisp-indent . apheleia-indent-lisp-buffer)
|
(lisp-indent . apheleia-indent-lisp-buffer)
|
||||||
(ktlint . ("ktlint" "--log-level=none" "--stdin" "-F" "-"))
|
(ktlint . ("ktlint" "--log-level=none" "--stdin" "-F" "-"))
|
||||||
(latexindent . ("latexindent" "--logfile=/dev/null"))
|
(latexindent . ("latexindent" "--logfile=/dev/null"))
|
||||||
(mix-format . ("apheleia-mix" "format" "-"))
|
(mix-format . ("apheleia-from-project-root"
|
||||||
|
".formatter.exs" "mix" "format" "-"))
|
||||||
(nixfmt . ("nixfmt"))
|
(nixfmt . ("nixfmt"))
|
||||||
(ocamlformat . ("ocamlformat" "-" "--name" filepath
|
(ocamlformat . ("ocamlformat" "-" "--name" filepath
|
||||||
"--enable-outside-detected-project"))
|
"--enable-outside-detected-project"))
|
||||||
|
@ -159,6 +160,8 @@
|
||||||
"--stderr" "--format" "quiet" "--fail-level" "fatal"))
|
"--stderr" "--format" "quiet" "--fail-level" "fatal"))
|
||||||
(ruby-standard . ("standardrb" "--stdin" filepath "--fix" "--stderr"
|
(ruby-standard . ("standardrb" "--stdin" filepath "--fix" "--stderr"
|
||||||
"--format" "quiet" "--fail-level" "fatal"))
|
"--format" "quiet" "--fail-level" "fatal"))
|
||||||
|
(ruby-syntax-tree . ("apheleia-from-project-root"
|
||||||
|
".streerc" "stree" "format" filepath))
|
||||||
(ruff . ("ruff" "format"
|
(ruff . ("ruff" "format"
|
||||||
"--silent"
|
"--silent"
|
||||||
(apheleia-formatters-fill-column "--line-length")
|
(apheleia-formatters-fill-column "--line-length")
|
||||||
|
|
|
@ -92,6 +92,17 @@ FILE-NAME."
|
||||||
(when-let ((file (locate-dominating-file default-directory file-name)))
|
(when-let ((file (locate-dominating-file default-directory file-name)))
|
||||||
(list file-flag (concat (expand-file-name file) file-name))))
|
(list file-flag (concat (expand-file-name file) file-name))))
|
||||||
|
|
||||||
|
(defun apheleia-formatters-args-from-file (file-name)
|
||||||
|
"Extract arguments from a text file.
|
||||||
|
Look for a file up recursively from the current directory until FILE-NAME is
|
||||||
|
found. If found, read the file and return an Alist of lines in the file."
|
||||||
|
(when-let ((file (locate-dominating-file default-directory file-name)))
|
||||||
|
(with-temp-buffer
|
||||||
|
(insert-file-contents (concat (expand-file-name file) file-name))
|
||||||
|
(cl-loop for line in (split-string (buffer-string) "\n" t)
|
||||||
|
collect line)))
|
||||||
|
)
|
||||||
|
|
||||||
(defun apheleia-formatters-extension-p (&rest exts)
|
(defun apheleia-formatters-extension-p (&rest exts)
|
||||||
"Assert whether current buffer has an extension in EXTS."
|
"Assert whether current buffer has an extension in EXTS."
|
||||||
(when-let ((name buffer-file-name)
|
(when-let ((name buffer-file-name)
|
||||||
|
|
40
scripts/formatters/apheleia-from-project-root
Executable file
40
scripts/formatters/apheleia-from-project-root
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# USAGE: apheleia-from-project-root ROOT-FNAME CMD...
|
||||||
|
#
|
||||||
|
# If there is a file called ROOT-FNAME in the current directory or any
|
||||||
|
# parent directory up to the root of the filesystem, first change to
|
||||||
|
# that directory. If not, no worries, proceed without error. Then
|
||||||
|
# execute CMD with provided args.
|
||||||
|
#
|
||||||
|
# This can be used to make sure that a formatter is executed in the
|
||||||
|
# root directory of a project, if the file is within a project. For
|
||||||
|
# example, ROOT-FNAME could be ".git" or ".formatter.exs" or
|
||||||
|
# "package.json" or "pyproject.toml".
|
||||||
|
|
||||||
|
if (( "$#" <= 1 )); then
|
||||||
|
echo >&2 "usage: apheleia-from-project-root ROOT-FNAME CMD..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This function prints the name of the current directory if it
|
||||||
|
# contains a file or directory named after the first argument, or the
|
||||||
|
# parent directory if it contains such a file, or the parent's parent,
|
||||||
|
# and so on. If no such file is found it returns nonzero.
|
||||||
|
# https://unix.stackexchange.com/a/22215
|
||||||
|
find_upwards() {
|
||||||
|
fname="$1"
|
||||||
|
|
||||||
|
path="${PWD}"
|
||||||
|
while [[ -n "${path}" && ! -e "${path}/${fname}" ]]; do
|
||||||
|
path="${path%/*}"
|
||||||
|
done
|
||||||
|
[[ -n "${path}" ]] && echo "${path}"
|
||||||
|
}
|
||||||
|
|
||||||
|
if dir="$(find_upwards "$1")"; then
|
||||||
|
cd -- "${dir}" || exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
shift
|
||||||
|
exec "$@"
|
|
@ -1,22 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# This function prints the name of the current directory if it
|
|
||||||
# contains a file or directory named after the first argument, or the
|
|
||||||
# parent directory if it contains such a file, or the parent's parent,
|
|
||||||
# and so on. If no such file is found it returns nonzero.
|
|
||||||
# https://unix.stackexchange.com/a/22215
|
|
||||||
find_upwards() {
|
|
||||||
fname="$1"
|
|
||||||
|
|
||||||
path="${PWD}"
|
|
||||||
while [[ -n "${path}" && ! -e "${path}/${fname}" ]]; do
|
|
||||||
path="${path%/*}"
|
|
||||||
done
|
|
||||||
[[ -n "${path}" ]] && echo "${path}"
|
|
||||||
}
|
|
||||||
|
|
||||||
if dir="$(find_upwards .formatter.exs)"; then
|
|
||||||
cd -- "${dir}" || exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec mix "$@"
|
|
4
test/formatters/installers/ruby-syntax-tree.bash
Normal file
4
test/formatters/installers/ruby-syntax-tree.bash
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# Need ruby for gem
|
||||||
|
apt-get install -y ruby
|
||||||
|
|
||||||
|
gem install syntax_tree
|
13
test/formatters/samplecode/ruby-syntax-tree/in.rb
Normal file
13
test/formatters/samplecode/ruby-syntax-tree/in.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
d=[30644250780,9003106878,
|
||||||
|
30636278846,66641217692,4501790980,
|
||||||
|
671_24_603036,131_61973916,66_606629_920,
|
||||||
|
30642677916,30643069058];a,s=[],$*[0]
|
||||||
|
s.each_byte{|b|a<<("%036b"%d[b.
|
||||||
|
chr.to_i]).scan(/\d{6}/)}
|
||||||
|
a.transpose.each{ |a|
|
||||||
|
a.join.each_byte{\
|
||||||
|
|i|print i==49?\
|
||||||
|
($*[1]||"#")\
|
||||||
|
:32.chr}
|
||||||
|
puts
|
||||||
|
}
|
18
test/formatters/samplecode/ruby-syntax-tree/out.rb
Normal file
18
test/formatters/samplecode/ruby-syntax-tree/out.rb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
d = [
|
||||||
|
30_644_250_780,
|
||||||
|
9_003_106_878,
|
||||||
|
30_636_278_846,
|
||||||
|
66_641_217_692,
|
||||||
|
4_501_790_980,
|
||||||
|
671_24_603036,
|
||||||
|
131_61973916,
|
||||||
|
66_606629_920,
|
||||||
|
30_642_677_916,
|
||||||
|
30_643_069_058
|
||||||
|
]
|
||||||
|
a, s = [], $*[0]
|
||||||
|
s.each_byte { |b| a << ("%036b" % d[b.chr.to_i]).scan(/\d{6}/) }
|
||||||
|
a.transpose.each do |a|
|
||||||
|
a.join.each_byte { |i| print i == 49 ? ($*[1] || "#") : 32.chr }
|
||||||
|
puts
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue