Js-beautify: ์ค„์ด ์ค„ ๋ฐ”๊ฟˆ ๊ธธ์ด์— ๋„๋‹ฌํ•˜๋ฉด html ์†์„ฑ ์ค„ ๋ฐ”๊ฟˆ ๋ฐ ์ •๋ ฌ

์— ๋งŒ๋“  2017๋…„ 11์›” 02์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: beautify-web/js-beautify

์„ค๋ช…

๋‚˜๋Š” ๋‹ค์Œ์˜ ํž˜์˜ ์กฐํ•ฉ์„ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
"wrap-attributes": "force-aligned",
"wrap-line-length": 120
๋‚ด ์ค„์ด ์ค„ ๋ฐ”๊ฟˆ ๊ธธ์ด์— ๋„๋‹ฌํ•˜๋ฉด ์ „์ฒด ์ค„์„ ์ค„ ๋ฐ”๊ฟˆํ•˜๊ณ  ์ด์ „ ์ค„๊ณผ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ

๋ฏธํ™”ํ•˜๊ธฐ ์ „์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

<p-dataTable
    [value]="data"
    [(selection)]="selectedRows"
    (selectionChange)="onSelectionChange($event)"
    [editable]="editable"
    [selectionMode]="settings.selectionMode"
    [resizableColumns]="settings.resizable"
    [reorderableColumns]="settings.reorderable"
    responsive="true"
    scrollable="true"
    scrollHeight="550px"
    [lazy]="settings.lazy"
    [totalRecords]="totalRecords"
    [paginator]="settings.paginator"
    [rows]="settings.paginator?.rowsPerPage || 10">
</p-dataTable>

์˜ˆ์ƒ ์ถœ๋ ฅ

ํ•ด๋‹น ๊ธฐ๋Šฅ์œผ๋กœ ๋ฏธํ™”ํ•œ ํ›„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<p-dataTable [value]="data" [(selection)]="selectedRows" (selectionChange)="onSelectionChange($event)" [editable]="editable"
             [selectionMode]="settings.selectionMode" [resizableColumns]="settings.resizable" [reorderableColumns]="settings.reorderable"
             responsive="true" scrollable="true" scrollHeight="550px" [lazy]="settings.lazy" [totalRecords]="totalRecords"
             [paginator]="settings.paginator" [rows]="settings.paginator?.rowsPerPage || 10">
</p-dataTable>
html enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ: ์ €๋Š” ์‹ค์ œ๋กœ ์ด ๋‘ ์„ค์ •์˜ ์กฐํ•ฉ์„ ์ฐพ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ด์ œ ์ œ์•ˆ๋œ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ VSCode๊ฐ€ ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์š”์†Œ๊ฐ€ 120๋ณด๋‹ค ๊ธธ์–ด์ง€๋ฉด ์†์„ฑ์„ ์ƒˆ ์ค„์— ์ •๋ ฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<div class="form-check form-group row">
  <label class="custom-control custom-checkbox" id="referral-filter-checkbox-label">
    <input type="checkbox" class="custom-control-input" id="referral-filter-checkbox" ng-checked="$ctrl.filterReferralsRx | async : this" ng-click="$ctrl.toggleFilterReferrals()">
    <input type="checkbox" class="custom-control-input"
           id="referral-filter-checkbox" 
           ng-checked="$ctrl.filterReferralsRx | async : this" 
           ng-click="$ctrl.toggleFilterReferrals()">
    <span class="custom-control-indicator"></span>
    <span class="custom-control-description text-nowrap">{{ 'MODEL.INBOX.ACTION.FILTER' | translate }}</span>
  </label>
</div>

์—๊ฒŒ:

<div class="form-check form-group row">
  <label class="custom-control custom-checkbox" id="referral-filter-checkbox-label">
    <input type="checkbox"
           class="custom-control-input"
           id="referral-filter-checkbox"
           ng-checked="$ctrl.filterReferralsRx | async : this"
           ng-click="$ctrl.toggleFilterReferrals()">
    <input type="checkbox" class="custom-control-input"
           id="referral-filter-checkbox" 
           ng-checked="$ctrl.filterReferralsRx | async : this" 
           ng-click="$ctrl.toggleFilterReferrals()">
    <span class="custom-control-indicator"></span>
    <span class="custom-control-description text-nowrap">{{ 'MODEL.INBOX.ACTION.FILTER' | translate }}</span>
  </label>
</div>

๋‘ ๋ฒˆ์งธ ์ž…๋ ฅ์€ 120์ž๋ณด๋‹ค ๊ธธ์ง€ ์•Š๊ณ  ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์€ ํž˜ ๋Œ€์‹  ์—ฌ๋Ÿฌ ์ค„๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ค„์ด 120์ž๋ฅผ ๋„˜์„ ๋•Œ ์—ฌ๋Ÿฌ ์ค„๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  12 ๋Œ“๊ธ€

+1, ๋‚˜์™€ ๋‚ด ํŒ€์€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋ฉฐ ์—ฌ๊ธฐ์—์„œ ์š”์ฒญํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://github.com/beautify-web/js-beautify/issues/1262
VSCode github์—์„œ ์š”์ฒญํ•œ ์ด ์ •ํ™•ํ•œ ๊ธฐ๋Šฅ๋„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค: https://github.com/Microsoft/vscode/issues/2204 (๋งˆ์ง€๋ง‰ ์ฝ”๋ฉ˜ํŠธ)

๋‚˜๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์•ฝ๊ฐ„ ๊ฐ€์ง€๊ณ  ๋†€์•˜๊ณ  ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค: "wrap_attributes" - "aligned"์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์˜ต์…˜์€ ์ค„ ๊ธธ์ด์— ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ํ•œ ์†์„ฑ์„ ๊ฐ•์ œ๋กœ ๋ž˜ํ•‘ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์ ˆํ•˜๊ฒŒ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์ค„์ด ๊ฐ๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค.

@bitwiseman, ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋…ผ์˜ํ•˜๊ฑฐ๋‚˜ PR์„ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ์†”์งํžˆ ๋งํ•ด์„œ, ๋‚˜๋Š” ์ •ํ™•ํžˆ ์˜คํ”ˆ ์†Œ์Šค ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ฉฐ ํ…Œ์ŠคํŠธ์™€ ํŒŒ์ด์ฌ ๋ฒ„์ „ ๋“ฑ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•ฉ๋‹ˆ๋‹ค.) ๊ธ€์Ž„, html beautifier๋Š” ํŒŒ์ด์ฌ์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•„๋งˆ๋„ ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :) ์ง€์นจ์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@cheerypick
์ด๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, HTML ๋ฏธํ™” ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ Python ๋ฒ„์ „์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ชจ๋“ˆ์— ๋Œ€ํ•œ Python ๊ตฌํ˜„์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋กœ์ปฌ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ test/data/html/tests.js๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค. ๋นŒ๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. #1158 ์—์„œ ์ด์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์‹œ๋„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. matrix ํ…Œ์ŠคํŠธ ์ƒ์„ฑ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด test/data/html/tests.js#L323 ์˜ ์†์„ฑ ๋žฉ ํ…Œ์ŠคํŠธ์— ์ƒˆ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์–ด๋–ค ๊ฒฝ์šฐ์ด๋“  ์–ธ์ œ๋“ ์ง€ ์ž์œ ๋กญ๊ฒŒ PR์„ ์‹œ์ž‘ํ•˜๋ฉด ๊ทธ๊ณณ์—์„œ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

(๋‹น์‹ ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ถ”๊ฐ€ ์ง€์นจ์œผ๋กœ CONTRIBUTING.md๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ๋„ ๊ฐ์‚ฌํ•  ๊ฒƒ์ด์ง€๋งŒ ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.)

@cheerypick - ๋˜ํ•œ ์ค‘๋ณต์„ ์ง€์ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. #1262์—์„œ ์ด ํ† ๋ก ์„ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค.

์ด์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ: ์ €๋Š” ์‹ค์ œ๋กœ ์ด ๋‘ ์„ค์ •์˜ ์กฐํ•ฉ์„ ์ฐพ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ด์ œ ์ œ์•ˆ๋œ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ VSCode๊ฐ€ ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์š”์†Œ๊ฐ€ 120๋ณด๋‹ค ๊ธธ์–ด์ง€๋ฉด ์†์„ฑ์„ ์ƒˆ ์ค„์— ์ •๋ ฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<div class="form-check form-group row">
  <label class="custom-control custom-checkbox" id="referral-filter-checkbox-label">
    <input type="checkbox" class="custom-control-input" id="referral-filter-checkbox" ng-checked="$ctrl.filterReferralsRx | async : this" ng-click="$ctrl.toggleFilterReferrals()">
    <input type="checkbox" class="custom-control-input"
           id="referral-filter-checkbox" 
           ng-checked="$ctrl.filterReferralsRx | async : this" 
           ng-click="$ctrl.toggleFilterReferrals()">
    <span class="custom-control-indicator"></span>
    <span class="custom-control-description text-nowrap">{{ 'MODEL.INBOX.ACTION.FILTER' | translate }}</span>
  </label>
</div>

์—๊ฒŒ:

<div class="form-check form-group row">
  <label class="custom-control custom-checkbox" id="referral-filter-checkbox-label">
    <input type="checkbox"
           class="custom-control-input"
           id="referral-filter-checkbox"
           ng-checked="$ctrl.filterReferralsRx | async : this"
           ng-click="$ctrl.toggleFilterReferrals()">
    <input type="checkbox" class="custom-control-input"
           id="referral-filter-checkbox" 
           ng-checked="$ctrl.filterReferralsRx | async : this" 
           ng-click="$ctrl.toggleFilterReferrals()">
    <span class="custom-control-indicator"></span>
    <span class="custom-control-description text-nowrap">{{ 'MODEL.INBOX.ACTION.FILTER' | translate }}</span>
  </label>
</div>

๋‘ ๋ฒˆ์งธ ์ž…๋ ฅ์€ 120์ž๋ณด๋‹ค ๊ธธ์ง€ ์•Š๊ณ  ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์€ ํž˜ ๋Œ€์‹  ์—ฌ๋Ÿฌ ์ค„๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ค„์ด 120์ž๋ฅผ ๋„˜์„ ๋•Œ ์—ฌ๋Ÿฌ ์ค„๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Visual Studio(Code ์•„๋‹˜)๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ HTML ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์ •๋ ฌ๋˜์ง€๋งŒ ๊ฐ•์ œ๋˜์ง€๋Š” ์•Š์Œ). ์ฝ”๋“œ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด html ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€์ง€ ์•Š๋„๋ก ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ ๋งค์šฐ ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค. @cheerypick ์•„์ง ํ™๋ณดํ•  ์ƒ๊ฐ์ด์‹ ๊ฐ€์š”?

VSCode์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
.vue ํŒŒ์ผ์—์„œ
ํ™•์žฅ: ๋” ์˜ˆ๋ป์š”, Vetur
:-(

@christoferd
๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์œผ๋ฉด ๋น„๊ณต๊ฐœ ์ด์Šˆ์— ๋Œ“๊ธ€์„ ๋‹ฌ์ง€ ๋ง๊ณ  gitter ์ฑ„๋„์—์„œ ์ฑ„ํŒ…ํ•˜์„ธ์š”.

VScode๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. Mac OS High Sierra์˜ ๋ฒ„์ „ 1.30.2. ์ž๋™์œผ๋กœ ์„ค์ •๋˜์—ˆ๊ณ  ๊ฐ‘์ž๊ธฐ ๋‚ด ์ฝ”๋“œ๊ฐ€ ๋ž˜ํ•‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•์ œ๋กœ ์ •๋ ฌ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@aybhalala @christoferd ๋‹น์‹ ์ด ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์œผ๋กœ ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. gitter์—์„œ ์ฑ„ํŒ…ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

@bitwiseman ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. Prettier ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฉ๊ธˆ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค. ์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰