UFO ET IT

새로운 JSLint 오류 "탭이 아닌 공백 사용"및 "안전하지 않은 문자"가 도입 된 이유는 무엇입니까?

ufoet 2020. 12. 30. 08:31
반응형

새로운 JSLint 오류 "탭이 아닌 공백 사용"및 "안전하지 않은 문자"가 도입 된 이유는 무엇입니까?


저는 약 2 년 동안 JSLint를 사용하여 JavaScript의 유효성을 검사 해 왔으며 때때로 변경되는 규칙이 있습니다. 일반적으로 JSLint가 새 규칙을 도입 할 때 구문 분석 할 때이 규칙을 무시하거나 무시하지 않도록 선택한 경우 코드가이를 준수하도록하는 확인란이 있습니다.

그러나 오늘 JSLint 유효성 검사를 실행하면서 다음 두 가지 새로운 오류가 발생했습니다.

탭이 아닌 공백을 사용하십시오.

이것은 "탭과 공백의 혼합"오류가 아닙니다. 탭만 사용하고 있습니다. 이것은 일반적으로 탭을 허용하지 않는 "탭과 공백의 혼합"의 최근 수정 된 버전입니다.

과:

안전하지 않은 캐릭터.

* /

안전하지 않은 캐릭터.

_const : {

무시할 새로운 옵션이 없습니다. 블록 주석을 닫는 것이 안전하지 않은 것이 무엇인지, 왜 _const : {가있을 때 안전하지 않은 것으로 간주하는 이유 nomen: true, (식별자에 _ 매달려 있음) 또는 들여 쓰기에 대한 구성이 여전히있을 때 갑자기 공백에서 탭으로 전환해야하는 이유를 이해할 수 없습니다. 탭이되는 4 개의 공백 중.

누구든지 JSLint가 이러한 새로운 규칙을 무시하도록 만드는 방법에 대해 왜 소개되었는지 알고 있습니까?

업데이트 :Messy White Space옵션은 문제를 해결하지만 다른 예기치 않은 동작을 일으킬 수 있습니다.

if (condition) { 
  //            ^-- there is a space but it won't indicate an error

Douglas Crockford가 훨씬 더 많은 사람들이 JSHint로 전환하도록 만든 것 같습니다. 이 커밋을 보세요 .

"공백과 탭 혼합"오류가 제거되고 새로운 "탭이 아닌 공백 사용"오류가 그 자리에 추가되었습니다. 그 외에도,이 차이의 원인을 보여주는 작은 변화가 하나 있습니다. 다음 줄 (주석 추가됨) :

at = source_row.search(/ \t/);
//                      ^ Space

다음으로 대체되었습니다.

at = source_row.search(/\t/);
//                      ^ No space!

그 검색 뒤에는 if진술이 있습니다. 조건이로 평가 true되면 "탭이 아닌 공백 사용"경고가 발생합니다. 그 진술은 다음과 같습니다.

if (at >= 0) {
    warn_at('use_spaces', line, at + 1);
}

나는 희망 이 크록 포드에 의해 조금 감독이다. 보시다시피, JSLint는 어디에서나 탭 문자를 사용하는 경우이 경고를 발생 시킵니다. 불행히도 그의 커밋 메시지는 완전히 쓸모가 없으며 문서가 업데이트되지 않은 것으로 보이므로이 변경의 이유에 대해 추측하는 것 외에는 아무것도 할 수 없습니다.

지금 당장 JSLint를 버리고 JSHint로 전환하는 것이 좋습니다 .


"지저분한 공백"옵션을 클릭하여 오류를 억제 할 수 있습니다.


대답하기 위해 JSLint 지금 탭에 대한 오류를 제공 http://www.jslint.com/help.html는 이 정당성을 제공합니다 :

탭과 공백은 혼합되어서는 안됩니다. 둘 다 가지고있는 문제를 피하기 위해 하나만 선택해야합니다. 개인적 선호는 매우 신뢰할 수없는 기준입니다. 둘 다 다른 것보다 강력한 이점을 제공하지 않습니다. 50 년 전 탭은 메모리를 적게 사용하는 이점이 있었지만 무어의 법칙은 이러한 이점을 제거했습니다. 공간은 탭보다 한 가지 분명한 이점이 있습니다. 탭이 나타내는 공간 수에 대한 신뢰할 수있는 표준은 없지만 공간이 공간을 차지한다는 것은 보편적으로 받아 들여집니다. 따라서 공백을 사용하십시오. 필요한 경우 탭으로 편집 할 수 있지만 커밋하기 전에 다시 공백인지 확인하십시오. 언젠가 마침내 탭에 대한 보편적 인 표준을 얻게 될지 모르지만 그날이 올 때까지 더 나은 선택은 공백입니다.

본질적으로 그는 탭이나 공백을 사용하여 혼합되는 것을 방지하기 위해 모두가 합의에 도달하기를 원합니다. 그는 공간 너비의 일관성이 더 나은 선택이라고 결정 했으므로 우리 모두가 그것을 사용해야합니다. 분명히 어떤 사람들은 이러한 사고 방식에 동의하지 않을 것입니다 (자신도 포함). 이것이 JSLint가 그 오류를 던지는 이유입니다.


편집기 / IDE에 따라 TAB 작동 방식을 조정할 수 있습니다.

예를 들어, 저는 Sublime Text를 사용합니다. 오른쪽 하단에는 탭 크기가 있습니다. 4.

나는 그것을 클릭하고 '공백을 사용하여 들여 쓰기'로 설정했습니다.

이것은 공백을 사용하도록 모든 탭을 업데이트하고 JSLint 오류가 사라졌습니다. 코드가 잘 구성되기를 바라기 때문에 JSLint에서 가능한 한 적은 옵션을 사용하려고합니다.

또한 편집기 설정을 기반으로 탭이 표시되는 JSFormat을 사용하므로 완료 할 때마다 JSFormat을 실행 한 다음 JSLint를 실행합니다. 오류 없음 = 행복한 소년!

도움이 되었기를 바랍니다.

참조 URL : https://stackoverflow.com/questions/13913189/why-were-the-new-jslint-errors-use-spaces-not-tabs-and-unsafe-character-int

반응형