Is there a JSX formatter for sublime text?

后端 未结 7 1302
闹比i
闹比i 2020-12-23 03:04

I\'m using Sublime Text as a text editor.

There\'s a jsFormat for formatting javascript files but I can\'t find one for JSX.

How you guys deal with formattin

7条回答
  •  隐瞒了意图╮
    2020-12-23 03:18

    Update 4

    Check prettier, not that configurable as esformatter, but currently used to format some big projects (like React itself)

    Update 3

    Check sublime jsfmt. If you add esformatter-jsx to the config and install the package inside the forlder for sublime-jsfmt. You will be able to format JSX files directly from Sublime. Here is a guide for that

    Update 2

    from the command line you can also use esbeautifier. It is a wrapper around esformatter that accept a list of globs to format

    # install the dependencies globally
    npm i -g esbeautifier
    
    # beautify the files under src/ and specs/ both .js and .jsx
    esbeautifier src/**/*.js* specs/**/*.js*
    

    Update

    So I ended up doing a plugin for esformatter to enable the formatting of JSX files:

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

    Here is a live demo on requirebin

    It should be somehow feasible to call esformatter from Sublime passing the current file as the argument. In any case to use it from the command line you can follow these instructions:

    From the command line it can be used like this:

    # 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
    

    ==== old answer below ===

    So if what you're looking is just to make your jsx files to be formatted while allowing the jsx syntax (basically beautify all the javascript syntax and ignore jsx tags, meaning leave them as is), this is what I'm doing using esformatter

    // 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);
    });
    

    I would actually like that esformatter use a version of rocambole that use esprima-fb instead of esprima, to avoid proxyquire.

提交回复
热议问题