Herb v0.8은 다양한 영역에서 상당한 개선을 이루었습니다. 주요 변경 사항은 다음과 같습니다.
새로운 언어 바인딩
-
Rust 바인딩: Crates.io를 통해
herb로 제공되며, 관용적인 Rust API로 Herb의 파싱 기능에 대한 전체 접근을 제공합니다. -
Java 바인딩: JNI를 통해 Java, Kotlin, Scala 등 JVM 생태계에 HTML+ERB 파싱 기능을 제공합니다.
설정 파일 지원
.herb.yml파일이 도입되어 Herb Linter 및 Formatter의 동작을 프로젝트 전체에서 사용자 정의하고 팀과 공유할 수 있습니다.
린터 개선
-
자동 수정 (
--fix): 수정 가능한 위반 사항을 자동으로 수정하는 새로운 옵션이 추가되었습니다. -
인라인 비활성화 주석:
<%# herb:disable %>주석을 사용하여 특정 린터 규칙을 인라인으로 비활성화할 수 있습니다. -
새로운 린터 규칙: 14개의 새로운 규칙이 추가되어 HTML+ERB 템플릿 작성에 도움을 줍니다.
-
사용자 정의 린터 규칙:
.herb/rules/디렉토리에 JavaScript 파일을 배치하여 프로젝트별 요구 사항에 맞는 사용자 정의 규칙을 정의할 수 있습니다. -
CLI 다중 파일 지원:
herb-lintCLI가 이제 여러 파일/디렉토리 또는 글로브를 인수로 허용합니다.
Herb Rewriters
-
새로운
@herb-tools/rewriter패키지가 도입되어 Herb 구문 트리를 전략적으로 순회, 수정 및 재작성하는 강력한 시스템을 제공합니다. -
사용자 정의 Rewriter:
.herb/rewriters/디렉토리에 JavaScript 파일을 배치하여 사용자 정의 Rewriter를 생성할 수 있습니다.
포매터 개선
-
텍스트 콘텐츠 및 공백 서식과 관련된 많은 버그가 수정되었습니다.
-
<%# herb:disable %>주석 배치 보존,case문 자식 처리 개선,frontmatter콘텐츠 존중 및 Rails 스캐폴드 템플릿 건너뛰기 등의 개선이 이루어졌습니다. -
Tailwind CSS 클래스 정렬 통합:
@herb-tools/tailwind-class-sorter가 내장 Rewriter로 통합되어 Tailwind 클래스 순서가 항상 일관되게 유지됩니다.
언어 서버 개선
-
저장 시 수정 (Fix-on-Save): 린트 위반 사항에 대한 자동 수정 기능이 추가되었습니다.
-
코드 액션: 현재 위치에서 린터 규칙을 비활성화하거나
.herb.yml을 직접 업데이트하는 코드 액션을 제공합니다.
Herb CLI 개선
-
parse및lex명령에 컬러 출력이 추가되어 파서 출력 검사 및 디버깅이 용이해졌습니다. -
파싱 오류 요약이 추가되어 긴 출력에서도 오류를 쉽게 파악할 수 있습니다.
-
herb analyze명령이Herb::Engine을 사용하여 모든 HTML+ERB 템플릿을 파싱 및 컴파일하여 잠재적 문제와 구문 오류를 조기에 경고합니다.
Visual Studio Code 개선
-
새로운
.herb.yml설정을 완벽하게 지원하며, 상태 표시줄, 설정 메뉴 및 설정 생성/관리 기능을 제공합니다. -
Rails Devcontainer 설정의 일부로 Herb LSP 확장이 기본으로 설치됩니다.
엔진 개선
-
적절한 ERB 트리밍 지원:
<%-및-%>ERB 태그가 이제 컴파일 및 평가 시 존중됩니다. -
사용자 정의 가능한 이스케이프 함수: HTML, JavaScript, CSS 이스케이프 함수를 사용자 정의할 수 있게 되었습니다.
-
=begin/=endRuby 블록 주석을 올바르게 처리하며, 컴파일된 Ruby 출력에서<%# ... %>및<% # ... %>주석을 완전히 제거하여 런타임 구문 오류를 방지합니다.
파서 개선
- HTML 태그 매칭을 위한 두 번 통과 알고리즘을 사용하여 ERB 제어 흐름 경계를 더 잘 처리하고 더 정확한 오류 메시지를 제공합니다.
내부 메모리 및 성능 개선
- Arena Allocator 구현 및
hb_string_T구조체 도입을 통해 메모리 관리 효율성을 높이고 메모리 누수를 수정했습니다.