Serials Javascript Style Guide – Whitespace
Whitespace
Spaces
Sử dụng tab mềm (kí tự khoảng trắng) với 2 khoảng trắng. eslint: indent
// bad
function foo() {
∙∙∙∙let name;
}
// bad
function bar() {
∙let name;
}
// good
function baz() {
∙∙let name;
}
Before blocks
Thêm 1 khoảng trắng trước khi bắt đầu dấu ngoặc. eslint: space-before-blocks
// bad
function test(){
console.log('test');
}
// good
function test() {
console.log('test');
}
// bad
dog.set('attr',{
age: '1 year',
breed: 'Bernese Mountain Dog',
});
// good
dog.set('attr', {
age: '1 year',
breed: 'Bernese Mountain Dog',
});
Around keywords
Thêm 1 khoảng trắng trước dấu ngoặc đơn mở trong các lệnh điều khiển (if
, while
etc.). Không thêm khoảng trắng vào giữa danh sách các tham số và tên hàm khi gọi hàm và trong khai báo hàm. eslint: keyword-spacing
// bad
if(isJedi) {
fight ();
}
// good
if (isJedi) {
fight();
}
// bad
function fight () {
console.log ('Swooosh!');
}
// good
function fight() {
console.log('Swooosh!');
}
Infix ops
Sử dụng toán tử có khoảng trắng. eslint: space-infix-ops
// bad
const x=y+5;
// good
const x = y + 5;
Newline at end
Kết thúc file với 1 ký tự newline. eslint: eol-last
// bad
import { es6 } from './AirbnbStyleGuide';
// ...
export default es6;
// bad
import { es6 } from './AirbnbStyleGuide';
// ...
export default es6;↵
↵
// good
import { es6 } from './AirbnbStyleGuide';
// ...
export default es6;↵
Chains
Sử dụng thụt lề khi chuỗi các phương thức dài (nhiều hơn 2 chuỗi phương thức). Sử dụng dấu chấm .
để bắt đầu nhấn mạnh dòng có gọi các phương thức, chứ không phải là lệnh mới. eslint: newline-per-chained-call
no-whitespace-before-property
// bad
$('#items').find('.selected').highlight().end().find('.open').updateCount();
// bad
$('#items').
find('.selected').
highlight().
end().
find('.open').
updateCount();
// good
$('#items')
.find('.selected')
.highlight()
.end()
.find('.open')
.updateCount();
// bad
const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
.attr('width', (radius + margin) * 2).append('svg:g')
.attr('transform', `translate(${radius + margin},${radius + margin})`)
.call(tron.led);
// good
const leds = stage.selectAll('.led')
.data(data)
.enter().append('svg:svg')
.classed('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', `translate(${radius + margin},${radius + margin})`)
.call(tron.led);
// good
const leds = stage.selectAll('.led').data(data);
After blocks
Để 1 dòng trống sau khối vè trước 1 lệnh kế tiếp.
// bad
if (foo) {
return bar;
}
return baz;
// good
if (foo) {
return bar;
}
return baz;
// bad
const obj = {
foo() {
},
bar() {
},
};
return obj;
// good
const obj = {
foo() {
},
bar() {
},
};
return obj;
// bad
const arr = [
function foo() {
},
function bar() {
},
];
return arr;
// good
const arr = [
function foo() {
},
function bar() {
},
];
return arr;
Padded blocks
Không nhồi thêm dòng trắng vào khối. eslint: padded-blocks
// bad
function bar() {
console.log(foo);
}
// bad
if (baz) {
console.log(qux);
} else {
console.log(foo);
}
// bad
class Foo {
constructor(bar) {
this.bar = bar;
}
}
// good
function bar() {
console.log(foo);
}
// good
if (baz) {
console.log(qux);
} else {
console.log(foo);
}
No multiple blanks
Không nhồi nhiều dòng trắng vào giữa các code. eslint: no-multiple-empty-lines
// bad
class Person {
constructor(fullName, email, birthday) {
this.fullName = fullName;
this.email = email;
this.setAge(birthday);
}
setAge(birthday) {
const today = new Date();
const age = this.getAge(today, birthday);
this.age = age;
}
getAge(today, birthday) {
// ..
}
}
// good
class Person {
constructor(fullName, email, birthday) {
this.fullName = fullName;
this.email = email;
this.setAge(birthday);
}
setAge(birthday) {
const today = new Date();
const age = getAge(today, birthday);
this.age = age;
}
getAge(today, birthday) {
// ..
}
}
In parens
Không thêm khoảng trắng bên trong dấu ngoặc đơn. eslint: space-in-parens
// bad
function bar( foo ) {
return foo;
}
// good
function bar(foo) {
return foo;
}
// bad
if ( foo ) {
console.log(foo);
}
// good
if (foo) {
console.log(foo);
}
In brackets
Không thêm khoảng trắng bên trong dấu ngoặc vuông. eslint: array-bracket-spacing
// bad
const foo = [ 1, 2, 3 ];
console.log(foo[ 0 ]);
// good
const foo = [1, 2, 3];
console.log(foo[0]);
In braces
Thêm khoảng trắng vào trong dấu ngoặc nhọn. eslint: object-curly-spacing
// bad
const foo = {clark: 'kent'};
// good
const foo = { clark: 'kent' };
Max len
Dòng code không quá 100 ký tự (kể cả ký tự trắng). Chú ý: đối với chuỗi dài, chuỗi dài thì sẽ không áp dụng với rule này, và không được xuống dòng. eslint: max-len
Tại sao ư? Nó dễ đọc và dễ maintain.
// bad
const foo = jsonData && jsonData.foo && jsonData.foo.bar && jsonData.foo.bar.baz && jsonData.foo.bar.baz.quux && jsonData.foo.bar.baz.quux.xyzzy;
// bad
$.ajax({ method: 'POST', url: 'https://airbnb.com/', data: { name: 'John' } }).done(() => console.log('Congratulations!')).fail(() => console.log('You have failed this city.'));
// good
const foo = jsonData
&& jsonData.foo
&& jsonData.foo.bar
&& jsonData.foo.bar.baz
&& jsonData.foo.bar.baz.quux
&& jsonData.foo.bar.baz.quux.xyzzy;
// good
$.ajax({
method: 'POST',
url: 'https://airbnb.com/',
data: { name: 'John' },
})
.done(() => console.log('Congratulations!'))
.fail(() => console.log('You have failed this city.'));
Block spacing
Nếu như cùng 1 line thì khuyến khích thêm khoảng trắng khi đóng và mở dấu ngoặc nhọn. eslint: block-spacing
// bad
function foo() {return true;}
if (foo) { bar = 0;}
// good
function foo() { return true; }
if (foo) { bar = 0; }
Comma spacing
Không thêm khoảng trắng trước dấu phẩy, bắt buộc thêm vào sau dấu phẩy. eslint: comma-spacing
// bad
var foo = 1,bar = 2;
var arr = [1 , 2];
// good
var foo = 1, bar = 2;
var arr = [1, 2];
Computed property spacing
Bắt buộc có khoảng trắng vào các thuộc tính tính toán trong dấu ngoặc. eslint: computed-property-spacing
// bad
obj[foo ]
obj[ 'foo']
var x = {[ b ]: a}
obj[foo[ bar ]]
// good
obj[foo]
obj['foo']
var x = { [b]: a }
obj[foo[bar]]
Func call spacing
Không thêm khoảng trắng vào giữa hàm và gọi hàm. eslint: func-call-spacing
// bad
func ();
func
();
// good
func();
Key spacing
Bắt buộc có khoảng trắng giữa key và value trong các thuộc tính của 1 đối tượng literal. eslint: key-spacing
// bad
var obj = { "foo" : 42 };
var obj2 = { "foo":42 };
// good
var obj = { "foo": 42 };
No trailing spaces
Bỏ khoảng trắng ở cuối dòng. eslint: no-trailing-spaces
No multiple empty lines
Tránh nhiều dòng trắng và chỉ cho phép 1 dòng mới ở cuối file. eslint: no-multiple-empty-lines
// bad
var x = 1;
var y = 2;
// good
var x = 1;
var y = 2;