Comments (9)
If anyone still cares >= 2020, I found the shell-command-on-region
to be handy (https://www.masteringemacs.org/article/executing-shell-commands-emacs).
Here's a short and naive implementation of formatting an Org-mode code block (my Emacs Fu isn't great, but it shouldn't be a lot of work to change it to format current selection).
(defun format-js-org-code-block ()
"Use Prettier to format a JavaScript Org-mode code block."
(interactive)
(shell-command-on-region
(code-block-start)
(code-block-end)
"prettier --parser babel"
(current-buffer)
t))
(defun code-block-start ()
"Find the beginning of code block."
(goto-char (search-backward "#+BEGIN_SRC"))
(next-line)
(beginning-of-line)
(point))
(defun code-block-end ()
"Find the end of code block."
(goto-char (search-forward "#+END_SRC"))
(previous-line)
(end-of-line)
(point))
from prettier-emacs.
We don't support it because in most cases selections are not valid AST. If you really want this you could use or copy the code from this branch, which has the prettier-js-prettify-region
function.
from prettier-emacs.
Since prettier can take string inputs instead of files, we could try to limit formatting to the region if it's defined and cancel formatting if the region doesn't have a valid AST.
from prettier-emacs.
Some Emacs packages allow automatic filtering by region when the mark is active. However, because Prettier is a full AST parser, I'm not sure it would be possible for Prettier itself for Prettier to format only part of a file because a region may not always have a completely valid JS AST, it might only be a child of a valid AST.
from prettier-emacs.
I agree, but most of the time I change small portion of a file and don't want to reformat entire file. If there is a selection which would form a valid AST, please consider letting the user format only the selection. May be a flag to enable this behavior.
from prettier-emacs.
Please consider a fix for this, I consistently run into this limitation.
from prettier-emacs.
There are scenarios related to literate programming where this would be useful. If the fragment cannot be parsed, then could you not just return an error, which is what it does anyway now when the file is not parseable.
from prettier-emacs.
I seems that prettier range options could be used? https://prettier.io/docs/en/options.html#range
from prettier-emacs.
Thanks @watofundefined here's what I ended up putting together for future onlookers :)
(defun prettier-region (posBegin posEnd)
"Print number of words and chars in region."
(interactive "r")
(message "Formatting …")
(let* (
(old-prettier-args prettier-js-args)
(prettier-js-args (append old-prettier-args
(list "--range-start" (number-to-string posBegin)
"--range-end" (number-to-string posEnd))))
)
(prettier-js)
)
)
from prettier-emacs.
Related Issues (20)
- How validate and format json HOT 1
- "No such file or directory" "prettier" Error HOT 1
- Using eslint_d to do the same as this package
- [question] "prettier-js is an available obsolete package."
- Disable formatting on save HOT 3
- prettier empties file HOT 1
- Could not apply prettier HOT 1
- diff error on OpenBSD
- prettier-js-mode reformats file even when file is in .prettierignore HOT 3
- "prettier errors: env: node: No such file or directory" HOT 6
- Highlighting "flickering" while applying formatting HOT 2
- Searching for program: No such file or directory, prettier HOT 2
- [warn] Ignored unknown option --stdin HOT 1
- Convenient way to disable per file HOT 1
- No files matching the pattern were found: "false". HOT 2
- Cannot find prettier anywhere HOT 2
- Prettier not formatting typescript file HOT 1
- do not respect .prettierignore
- Not working with prettier 3.0.1 HOT 2
- Handle cloned buffers and give error message when not visiting a file
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from prettier-emacs.