diff --git a/CHANGELOG.md b/CHANGELOG.md index edcf7ef..e53f6da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Next +- Add GN language and beautifier - Add the option to indent Bash with tabs [#1951](https://github.com/Glavin001/atom-beautify/issues/1951) - See [#1980](https://github.com/Glavin001/atom-beautify/pull/1980). Add VHDL beautifier and language support. - Implement Verilog/SystemVerilog beautification via emacs verilog-mode diff --git a/README.md b/README.md index 053641c..a5e93ae 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ Some of the supported beautifiers are developed for Node.js and are automaticall | formatR | :warning: 1 executable | :white_check_mark: :100:% of executables | :whale: With [Docker](https://www.docker.com/):
1. Install [Rscript (`rscript`)](https://github.com/yihui/formatR) with `docker pull unibeautify/rscript`

:bookmark_tabs: Manually:
1. Install [Rscript (`rscript`)](https://github.com/yihui/formatR) by following https://github.com/yihui/formatR
| | Fortran Beautifier | :warning: 1 executable | :x: No Docker support | :bookmark_tabs: Manually:
1. Install [Emacs (`emacs`)](https://www.gnu.org/software/emacs/) by following https://www.gnu.org/software/emacs/
| | Gherkin formatter | :white_check_mark: | :ok_hand: Not necessary | :smiley: Nothing! | +| GN | :warning: 1 executable | :x: No Docker support | :bookmark_tabs: Manually:
1. Install [gn (`gn`)](https://chromium.googlesource.com/chromium/src/tools/gn) by following https://www.chromium.org/developers/how-tos/get-the-code
| | gofmt | :warning: Manual installation | :construction: Not an executable | :page_facing_up: Go to https://golang.org/cmd/gofmt/ and follow the instructions. | | goimports | :warning: 1 executable | :white_check_mark: :100:% of executables | :whale: With [Docker](https://www.docker.com/):
1. Install [goimports (`goimports`)](https://godoc.org/golang.org/x/tools/cmd/goimports) with `docker pull unibeautify/goimports`

:bookmark_tabs: Manually:
1. Install [goimports (`goimports`)](https://godoc.org/golang.org/x/tools/cmd/goimports) by following https://godoc.org/golang.org/x/tools/cmd/goimports
| | hh_format | :warning: Manual installation | :construction: Not an executable | :page_facing_up: Go to http://hhvm.com/ and follow the instructions. | @@ -167,6 +168,7 @@ See [all supported options in the documentation at `docs/options.md`](docs/opti | Fortran | `Fortran - Modern` |`.f90`, `.F90`, `.f95`, `.F95`, `.f03`, `.F03`, `.f08`, `.F08` | **[`Fortran Beautifier`](https://www.gnu.org/software/emacs/)** | | gherkin | `Gherkin` |`.feature` | **[`Gherkin formatter`](https://github.com/Glavin001/atom-beautify/blob/master/src/beautifiers/gherkin.coffee)** | | GLSL | `C`, `opencl`, `GLSL` |`.vert`, `.frag` | **[`clang-format`](https://clang.llvm.org/docs/ClangFormat.html)** | +| GN | `gn` |`.gn`, `.gni` | **[`GN`](https://chromium.googlesource.com/chromium/src/tools/gn)** | | Go | `Go` |`.go` | **[`gofmt`](https://golang.org/cmd/gofmt/)**, [`goimports`](https://godoc.org/golang.org/x/tools/cmd/goimports) | | Golang Template | `HTML (Go)`, `Go Template` |`.gohtml` | **[`Pretty Diff`](https://github.com/prettydiff/prettydiff)** | | Handlebars | `Handlebars`, `HTML (Handlebars)` |`.hbs`, `.handlebars` | **[`JS Beautify`](https://github.com/beautify-web/js-beautify)**, [`Pretty Diff`](https://github.com/prettydiff/prettydiff) | diff --git a/docs/options.md b/docs/options.md index 0e6812d..9605536 100644 --- a/docs/options.md +++ b/docs/options.md @@ -249,6 +249,23 @@ Options for Emacs executable. 2. Go into *Packages* and search for "*Atom Beautify*" package. 3. Find the option "*Emacs*" and change it to your desired configuration. +##### [gn](#gn) + +**Important**: This option is only configurable from within Atom Beautify's setting panel. + +**Type**: `object` + +**Description**: + +Options for gn executable. + +**How to Configure** + +1. You can open the [Settings View](https://github.com/atom/settings-view) by navigating to +*Edit > Preferences (Linux)*, *Atom > Preferences (OS X)*, or *File > Preferences (Windows)*. +2. Go into *Packages* and search for "*Atom Beautify*" package. +3. Find the option "*gn*" and change it to your desired configuration. + ##### [goimports](#goimports) **Important**: This option is only configurable from within Atom Beautify's setting panel. @@ -3597,6 +3614,75 @@ Path to clang-format config file. i.e. clang-format.cfg (Supported by clang-form } ``` +#### [GN](#gn) + +**Supported Beautifiers**: [`GN`](#gn) + +| Option | GN | +| --- | --- | +| `disabled` | :white_check_mark: | +| `default_beautifier` | :white_check_mark: | +| `beautify_on_save` | :white_check_mark: | + +**Description**: + +Options for language GN + +##### [Disable Beautifying Language](#disable-beautifying-language) + +**Important**: This option is only configurable from within Atom Beautify's setting panel. + +**Type**: `boolean` + +**Description**: + +Disable GN Beautification + +**How to Configure** + +1. You can open the [Settings View](https://github.com/atom/settings-view) by navigating to +*Edit > Preferences (Linux)*, *Atom > Preferences (OS X)*, or *File > Preferences (Windows)*. +2. Go into *Packages* and search for "*Atom Beautify*" package. +3. Find the option "*Disable Beautifying Language*" and change it to your desired configuration. + +##### [Default Beautifier](#default-beautifier) + +**Important**: This option is only configurable from within Atom Beautify's setting panel. + +**Default**: `GN` + +**Type**: `string` + +**Enum**: `GN` + +**Description**: + +Default Beautifier to be used for GN + +**How to Configure** + +1. You can open the [Settings View](https://github.com/atom/settings-view) by navigating to +*Edit > Preferences (Linux)*, *Atom > Preferences (OS X)*, or *File > Preferences (Windows)*. +2. Go into *Packages* and search for "*Atom Beautify*" package. +3. Find the option "*Default Beautifier*" and change it to your desired configuration. + +##### [Beautify On Save](#beautify-on-save) + +**Important**: This option is only configurable from within Atom Beautify's setting panel. + +**Type**: `boolean` + +**Description**: + +Automatically beautify GN files on save + +**How to Configure** + +1. You can open the [Settings View](https://github.com/atom/settings-view) by navigating to +*Edit > Preferences (Linux)*, *Atom > Preferences (OS X)*, or *File > Preferences (Windows)*. +2. Go into *Packages* and search for "*Atom Beautify*" package. +3. Find the option "*Beautify On Save*" and change it to your desired configuration. + #### [Go](#go) **Supported Beautifiers**: [`gofmt`](#gofmt) [`goimports`](#goimports) diff --git a/examples/nested-jsbeautifyrc/gn/expected/test.gn b/examples/nested-jsbeautifyrc/gn/expected/test.gn new file mode 100644 index 0000000..46d9ff9 --- /dev/null +++ b/examples/nested-jsbeautifyrc/gn/expected/test.gn @@ -0,0 +1,19 @@ +shared_library("test") { + # NOSORT + sources = [ + "z.cc", + "a.cc", + ] + + deps = [ + "//abc:deps", + ] + include_dirs = [ "." ] + + if (is_win) { + sources += [ + "a.cpp", + "b.cpp", + ] + } +} diff --git a/examples/nested-jsbeautifyrc/gn/original/test.gn b/examples/nested-jsbeautifyrc/gn/original/test.gn new file mode 100644 index 0000000..ffc6003 --- /dev/null +++ b/examples/nested-jsbeautifyrc/gn/original/test.gn @@ -0,0 +1,18 @@ +shared_library("test") { + +# NOSORT +sources = [ + "z.cc", + "a.cc", +] + + +deps=["//abc:deps"] + include_dirs = [ + ".", + ] + + if (is_win) { + sources += ["b.cpp","a.cpp"] + } +} diff --git a/package.json b/package.json index 9f8951c..cffce55 100644 --- a/package.json +++ b/package.json @@ -294,7 +294,8 @@ "atom-beautify:beautify-language-terraform", "atom-beautify:beautify-language-tsx", "atom-beautify:beautify-language-verilog", - "atom-beautify:beautify-language-vhdl" + "atom-beautify:beautify-language-vhdl", + "atom-beautify:beautify-language-gn" ], ".tree-view .file .name": [ "atom-beautify:beautify-file" @@ -437,7 +438,8 @@ "verilog", "emacs verilog mode", "vhdl", - "vhdl beautifier" + "vhdl beautifier", + "gn" ], "devDependencies": { "coffeelint": "1.16.0" diff --git a/src/beautifiers/gn.coffee b/src/beautifiers/gn.coffee new file mode 100644 index 0000000..ce306c6 --- /dev/null +++ b/src/beautifiers/gn.coffee @@ -0,0 +1,34 @@ +### +Requires [gn](https://chromium.googlesource.com/chromium/src/tools/gn) +### +"use strict" +Beautifier = require('./beautifier') +path = require('path') +semver = require('semver') + +module.exports = class GN extends Beautifier + name: "GN" + link: "https://chromium.googlesource.com/chromium/src/tools/gn" + executables: [ + { + name: "gn" + cmd: "gn" + homepage: "https://chromium.googlesource.com/chromium/src/tools/gn" + installation: "https://www.chromium.org/developers/how-tos/get-the-code" + version: { + parse: (text) -> semver.clean("0.0." + text) + } + } + ] + + options: { + GN: false + } + + beautify: (text, language, options, context) -> + cwd = context.filePath and path.dirname context.filePath + @exe("gn").run(["format", "--stdin"], { + cwd: cwd + onStdin: (stdin) -> + stdin.end text + }) diff --git a/src/beautifiers/index.coffee b/src/beautifiers/index.coffee index 9b19bd6..e18278a 100644 --- a/src/beautifiers/index.coffee +++ b/src/beautifiers/index.coffee @@ -49,6 +49,7 @@ module.exports = class Beautifiers extends EventEmitter 'htmlbeautifier' 'csscomb' 'gherkin' + 'gn' 'gofmt' 'goimports' 'latex-beautify' diff --git a/src/languages/gn.coffee b/src/languages/gn.coffee new file mode 100644 index 0000000..5e1799b --- /dev/null +++ b/src/languages/gn.coffee @@ -0,0 +1,23 @@ +module.exports = { + + name: "GN" + namespace: "gn" + + ### + Supported Grammars + ### + grammars: [ + "gn" + ] + + ### + Supported extensions + ### + extensions: [ + "gn" + "gni" + ] + + defaultBeautifier: "GN" + +} diff --git a/src/languages/index.coffee b/src/languages/index.coffee index 1f87f1a..e0df65c 100644 --- a/src/languages/index.coffee +++ b/src/languages/index.coffee @@ -31,6 +31,7 @@ module.exports = class Languages "erlang" "gherkin" "glsl" + "gn" "go" "gohtml" "fortran" diff --git a/src/options.json b/src/options.json index 4de7b50..c5c8092 100644 --- a/src/options.json +++ b/src/options.json @@ -1856,6 +1856,48 @@ } } }, + "gn": { + "title": "GN", + "type": "object", + "description": "Options for language GN", + "collapsed": true, + "beautifiers": [ + "GN" + ], + "grammars": [ + "gn" + ], + "extensions": [ + "gn", + "gni" + ], + "properties": { + "disabled": { + "title": "Disable Beautifying Language", + "order": -3, + "type": "boolean", + "default": false, + "description": "Disable GN Beautification" + }, + "default_beautifier": { + "title": "Default Beautifier", + "order": -2, + "type": "string", + "default": "GN", + "description": "Default Beautifier to be used for GN", + "enum": [ + "GN" + ] + }, + "beautify_on_save": { + "title": "Beautify On Save", + "order": -1, + "type": "boolean", + "default": false, + "description": "Automatically beautify GN files on save" + } + } + }, "go": { "title": "Go", "type": "object", @@ -9077,6 +9119,22 @@ } } }, + "gn": { + "key": "gn", + "title": "gn", + "type": "object", + "collapsed": true, + "description": "Options for gn executable.", + "properties": { + "path": { + "key": "path", + "title": "Binary/Script Path", + "type": "string", + "default": "", + "description": "Absolute path to the \"gn\" executable's binary/script." + } + } + }, "goimports": { "key": "goimports", "title": "goimports",