Esiste un formattatore JSX per il testo sublime?


91

Sto usando Sublime Text come editor di testo.

C'è un jsFormat per la formattazione dei file javascript ma non riesco a trovarne uno per JSX.

Come affrontate la formattazione di JSX?


Sì, cerca il pacchetto jsx textmate che può essere utilizzato praticamente con qualsiasi editor.
Brigante

sembra solo un accendino di sintassi, sto cercando il formattatore che identifichi e generi cose
fin

2
Non ne conosco uno. Il gruppo di Google React sarebbe un posto migliore per chiedere.
Brigante

non riesco nemmeno a trovare una buona soluzione. Attualmente è possibile analizzare il sorgente con esprima-fb e utilizzare escodegen-jsx per generare l'output formattato. Le opzioni di formattazione sono limitate e si perdono le linee bianche ... inoltre escodegen-jsx è un fork senza tracciamento dei problemi .. non sono sicuro che verrà mantenuto attivamente. Mi chiedo come fb si occupa della loro base di codice jsx.
user1600124

la versione beta di esformatter sembra avere una certa capacità di formattare JSX perché utilizza esprima-fb, ma non è ancora pronta per la produzione
fin

Risposte:


60

Aggiorna 4

Controlla più carino, non configurabile come esformatter, ma attualmente utilizzato per formattare alcuni grandi progetti ( come lo stesso React )

Aggiorna 3

Controlla il sublime jsfmt . Se aggiungi esformatter-jsx alla configurazione e installi il pacchetto all'interno del forlder per sublime-jsfmt. Sarai in grado di formattare i file JSX direttamente da Sublime. Ecco una guida per questo

Aggiorna 2

dalla riga di comando puoi anche usare esbeautifier . È un wrapper attorno a esformatter che accetta un elenco di glob da formattare

# install the dependencies globally
npm i -g esbeautifier

# beautify the files under src/ and specs/ both .js and .jsx
esbeautifier src/**/*.js* specs/**/*.js*

Aggiornare

Quindi ho finito per creare un plugin per esformatter per abilitare la formattazione dei file JSX:

https://www.npmjs.com/package/esformatter-jsx

Ecco una demo live su requirebin

Dovrebbe essere in qualche modo possibile chiamare esformatter da Sublime passando il file corrente come argomento. In ogni caso per utilizzarlo da riga di comando puoi seguire queste istruzioni:

Dalla riga di comando può essere utilizzato in questo modo:

# install the dependencies globally
npm i -g esformatter esformatter-jsx

# call it (this will print to stdout)
esformatter --plugins=esformatter-jsx ./path/to/your/file

# to actually modify the file
esformatter --plugins=esformatter-jsx ./path/to/your/file > ./path/to/your/file

# to specify a config file (where you can also specify the plugins)
# check esformatter for more info about the configuration options
esformatter -c ./path/to/.esformatter ./path/to/your/file > ./path/to/your/file

==== vecchia risposta sotto ===

Quindi, se quello che stai cercando è solo per fare in modo che i tuoi file jsx vengano formattati consentendo la jsxsintassi (fondamentalmente abbellisci tutta la sintassi javascript e ignora i jsxtag, il che significa lasciarli così com'è), questo è quello che sto facendo usandoesformatter

// needed for grunt.file.expand
var grunt = require('grunt');

// use it with care, I haven't check if there
// isn't any side effect from using proxyquire to 
// inject esprima-fb into the esformatter
// but this type of dependency replacement
// seems to be very fragile... if rocambole deps change 
// this will certainly break, same is true for esformatter
// use it with care
var proxyquire = require('proxyquire');
var rocambole = proxyquire('rocambole', {
  'esprima': require('esprima-fb')
});

var esformatter = proxyquire('esformatter', {
  rocambole: rocambole
});

// path to your esformatter configuration
var cfg = grunt.file.readJSON('./esformatter.json');

// expand the files from the glob
var files = grunt.file.expand('./js/**/*.jsx');

// do the actual formatting
files.forEach(function (fIn) {
  console.log('formatting', fIn);
  var output = esformatter.format(grunt.file.read(fIn), cfg);
  grunt.file.write(fIn, output);
});

In realtà vorrei che esformatter usasse una versione di rocambole che usi esprima-fb invece di esprima, per evitare proxyquire.


1
Questo ha funzionato solo con esformatter-jsx-ignore per me, ma è abbastanza buono. Grazie!
Jasper

Sto usando esformatter-jsx e funziona come mi aspettavo. Tuttavia, ho anche dovuto aggiungere "esformatter-jsx" a "options": {"plugins": {"esformatter-jsx"}} in "Preferences> Package Settings> Sublime JSFMT> Settings - Default" in Sublime 3 per farlo funziona
Kuma

Questa è un'ottima risposta, ho questo strumento usato da un po 'di tempo, ma siamo passati all'uso di es6 / es7 con babel e non funziona più.

1
controlla la tua sublime console, in mac per aprire la console premi ctrl + `puoi aprire un ticket sul repository esformatter-jsx o nel repository JSFMT con l'errore che vedi nella console
roy riojas

2
più carina fa il lavoro per me. plugin sublime qui github.com/jonlabelle/SublimeJsPrettier e ha anche il supporto per eslint github.com/prettier/prettier#eslint . Sono contento che questa domanda venga finalmente accettata dopo quasi 3 anni.
pinna

57

C'è un'impostazione nel plug-in HTML-CSS-JS Prettify che ti consente di ignorare la sintassi xml nel file js / jsx. In questo modo non rovina il codice jsx. L'impostazione è: "e4x": truenella sezione "js" del file delle impostazioni

Preferenze> Impostazioni pacchetto> HTML \ CSS \ JS Prettify> Imposta preferenze Prettify

Questo non funziona bene se hai tag a chiusura automatica, ad es. tag che terminano con />


1
Funziona ancora molto bene con le ultime versioni di babel-sublime e HTML-CSS-JS Prettify. Assicurati solo di aggiungere "jsx" o qualsiasi estensione di file che usi a "allowed_file_extensions".
maledetto

Questa risposta è obsoleta? Non c'è />nel mio codice, ma ancora non funziona
Andy Darwin

2
più carina (aka jsprettier) per sublime è di gran lunga la migliore !! Vedere la risposta qui sotto: stackoverflow.com/a/42169688/2178112
majorBummer

20

Puoi installare un pacchetto JsPrettier per Sublime 2 e 3. È un formattatore JavaScript abbastanza nuovo (al momento della stesura di questo articolo: febbraio 2017). Supporta la maggior parte degli ultimi sviluppi come: ES2017, JSX e Flow.

Avvio rapido

  1. Installa più carino a livello globale usando il terminale: $ npm install -g prettier
  2. In Sublime vai su Strumenti -> Tavolozza dei comandi ... -> Controllo pacchetto: Installa pacchetto, digita la parola JsPrettier, quindi selezionala per completare l'installazione.
  3. Formatta il tuo file usando il menu contestuale all'interno dell'editor o collegalo a una scorciatoia da tastiera: { "keys": ["super+b"], "command": "js_prettier" }

Collegamenti:


1
Questa è di gran lunga la migliore risposta ora! più bella è da bomba!
majorBummer

1
Sì, in effetti, questo ha funzionato perfettamente anche per me. La cosa più importante da notare è la parte "globale".
Ionut Necula

19

Per aggiungere a ciò che ha detto @Shoobah:

C'è un'impostazione nel plug-in HTML-CSS-JS Prettify che ti consente di ignorare la sintassi xml nel file js / jsx. In questo modo non rovina il codice jsx. L'impostazione è: "e4x": true nella sezione "js" del file delle impostazioni

Vai a: Preferenze> Impostazioni pacchetto> HTML \ CSS \ JS Prettify> Imposta preferenze Prettify

Vai alla sezione "js":

Aggiungi "jsx" a "allowed_file_extension", quindi cambia "e4x" in "true"


16

la risposta su Internet che ti diceva sempre di impostare "e4x" su true, ma a volte dobbiamo impostare l'opzione di "format_on_save_extensions" quindi aggiungere "jsx" nell'array

modificare jsFormat.sublime-settings

{
  "e4x": true,
  "format_on_save": true,
  "format_on_save_extensions": ["js", "json", "jsx"]
}

Ho fatto come da te detto, ma non ha funzionato per me. :(
Yash Vekaria

Dove si trova "jsFormat.sublime-settings" ? in modo che io possa modificare "format_on_save_extensions": ["js", "json", "jsx"]. Il più vicino che trovo sulle estensioni di file è:"js": { "allowed_file_extensions": ["js", "json",...]
Chris22

Puoi trovarlo qui: Preferenze> Impostazioni pacchetto> jsFormat> Impostazioni - Utente. Non ha funzionato per me, tuttavia, fa ancora rientrare JSX in modo strano :(
Niclas

Stavo cercando una soluzione e questa ha risolto il mio problema, grazie!
Al-Maamari Tareq

4

Utilizzando il programma di installazione dei pacchetti di Sublime, installa Babel . Poi:

  1. Apri un file .jsx.
  2. Seleziona Visualizza dal menu,
  3. Quindi Sintassi -> Apri tutto con l'estensione corrente come ... -> Babel -> JavaScript (Babel).

C'è anche un pacchetto di lingue JSX che può essere utilizzato
TabsNotSpaces

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.