language: Update block_comment and documentation comment (#34861)
As suggested in https://github.com/zed-industries/zed/pull/34418, this proposes various changes to language configs to make block comments and doc-block-style comments more similar. In doing so, it introduces some breaking changes into the extension schema. This change is needed to support the changes I'm working on in #34418, to be able to support `rewrap` in block comments like `/* really long comment ... */`. As is, we can do this in C-style doc-block comments (eg `/** ... */`) because of the config in `documentation`, but we can't do this in regular block comments because we lack the info about what the line prefix and indentation should be. And while I was here, I did various other clean-ups, many of which feel nice but are optional. I would love special attention on the changes to the schema, version and related changes; I'm totally unfamiliar with that part of Zed. **Summary of changes** - break: changes type of `block_comment` to same type as `documentation_comment` (**this is the important change**) - break: rename `documentation` to `documentation_comment` (optional, but improves consistency w/ `line_comments` and `block_comment`) - break/refactor?: removes some whitespace in the declaration of `block_comment` delimiters (optional, may break things, need input; some langs had no spaces, others did) - refactor: change `tab_size` from `NonZeroU32` to just a `u32` (some block comments don't seem to need/want indent past the initial delimiter, so we need this be 0 sometimes) - refactor: moves the `documentation_comment` declarations to appear next to `block_comment`, rearranges the order of the fields in the TOML for `documentation_comment`, rename backing `struct` (all optional) **Future scope** I believe that this will also allow us to extend regular block comments on newline – as we do doc-block comments – but I haven't looked into this yet. (eg, in JS try pressing enter in both of these: `/* */` and `/** */`; the latter should extend w/ a `*` prefixed line, while the former does not.) Release Notes: - BREAKING CHANGE: update extension schema version from 1 to 2, change format of `block_comment` and rename `documentation_comment` /cc @smitbarmase
This commit is contained in:
parent
14171e0721
commit
1f4c9b9427
18 changed files with 249 additions and 74 deletions
|
@ -2273,7 +2273,12 @@ fn test_language_scope_at_with_javascript(cx: &mut App) {
|
|||
LanguageConfig {
|
||||
name: "JavaScript".into(),
|
||||
line_comments: vec!["// ".into()],
|
||||
block_comment: Some(("/*".into(), "*/".into())),
|
||||
block_comment: Some(BlockCommentConfig {
|
||||
start: "/*".into(),
|
||||
end: "*/".into(),
|
||||
prefix: "* ".into(),
|
||||
tab_size: 1,
|
||||
}),
|
||||
brackets: BracketPairConfig {
|
||||
pairs: vec![
|
||||
BracketPair {
|
||||
|
@ -2300,7 +2305,12 @@ fn test_language_scope_at_with_javascript(cx: &mut App) {
|
|||
"element".into(),
|
||||
LanguageConfigOverride {
|
||||
line_comments: Override::Remove { remove: true },
|
||||
block_comment: Override::Set(("{/*".into(), "*/}".into())),
|
||||
block_comment: Override::Set(BlockCommentConfig {
|
||||
start: "{/*".into(),
|
||||
prefix: "".into(),
|
||||
end: "*/}".into(),
|
||||
tab_size: 0,
|
||||
}),
|
||||
..Default::default()
|
||||
},
|
||||
)]
|
||||
|
@ -2338,9 +2348,15 @@ fn test_language_scope_at_with_javascript(cx: &mut App) {
|
|||
let config = snapshot.language_scope_at(0).unwrap();
|
||||
assert_eq!(config.line_comment_prefixes(), &[Arc::from("// ")]);
|
||||
assert_eq!(
|
||||
config.block_comment_delimiters(),
|
||||
Some((&"/*".into(), &"*/".into()))
|
||||
config.block_comment(),
|
||||
Some(&BlockCommentConfig {
|
||||
start: "/*".into(),
|
||||
prefix: "* ".into(),
|
||||
end: "*/".into(),
|
||||
tab_size: 1,
|
||||
})
|
||||
);
|
||||
|
||||
// Both bracket pairs are enabled
|
||||
assert_eq!(
|
||||
config.brackets().map(|e| e.1).collect::<Vec<_>>(),
|
||||
|
@ -2360,8 +2376,13 @@ fn test_language_scope_at_with_javascript(cx: &mut App) {
|
|||
.unwrap();
|
||||
assert_eq!(string_config.line_comment_prefixes(), &[Arc::from("// ")]);
|
||||
assert_eq!(
|
||||
string_config.block_comment_delimiters(),
|
||||
Some((&"/*".into(), &"*/".into()))
|
||||
string_config.block_comment(),
|
||||
Some(&BlockCommentConfig {
|
||||
start: "/*".into(),
|
||||
prefix: "* ".into(),
|
||||
end: "*/".into(),
|
||||
tab_size: 1,
|
||||
})
|
||||
);
|
||||
// Second bracket pair is disabled
|
||||
assert_eq!(
|
||||
|
@ -2391,8 +2412,13 @@ fn test_language_scope_at_with_javascript(cx: &mut App) {
|
|||
.unwrap();
|
||||
assert_eq!(tag_config.line_comment_prefixes(), &[Arc::from("// ")]);
|
||||
assert_eq!(
|
||||
tag_config.block_comment_delimiters(),
|
||||
Some((&"/*".into(), &"*/".into()))
|
||||
tag_config.block_comment(),
|
||||
Some(&BlockCommentConfig {
|
||||
start: "/*".into(),
|
||||
prefix: "* ".into(),
|
||||
end: "*/".into(),
|
||||
tab_size: 1,
|
||||
})
|
||||
);
|
||||
assert_eq!(
|
||||
tag_config.brackets().map(|e| e.1).collect::<Vec<_>>(),
|
||||
|
@ -2408,8 +2434,13 @@ fn test_language_scope_at_with_javascript(cx: &mut App) {
|
|||
&[Arc::from("// ")]
|
||||
);
|
||||
assert_eq!(
|
||||
expression_in_element_config.block_comment_delimiters(),
|
||||
Some((&"/*".into(), &"*/".into()))
|
||||
expression_in_element_config.block_comment(),
|
||||
Some(&BlockCommentConfig {
|
||||
start: "/*".into(),
|
||||
prefix: "* ".into(),
|
||||
end: "*/".into(),
|
||||
tab_size: 1,
|
||||
})
|
||||
);
|
||||
assert_eq!(
|
||||
expression_in_element_config
|
||||
|
@ -2528,13 +2559,18 @@ fn test_language_scope_at_with_combined_injections(cx: &mut App) {
|
|||
let html_config = snapshot.language_scope_at(Point::new(2, 4)).unwrap();
|
||||
assert_eq!(html_config.line_comment_prefixes(), &[]);
|
||||
assert_eq!(
|
||||
html_config.block_comment_delimiters(),
|
||||
Some((&"<!--".into(), &"-->".into()))
|
||||
html_config.block_comment(),
|
||||
Some(&BlockCommentConfig {
|
||||
start: "<!--".into(),
|
||||
end: "-->".into(),
|
||||
prefix: "".into(),
|
||||
tab_size: 0,
|
||||
})
|
||||
);
|
||||
|
||||
let ruby_config = snapshot.language_scope_at(Point::new(3, 12)).unwrap();
|
||||
assert_eq!(ruby_config.line_comment_prefixes(), &[Arc::from("# ")]);
|
||||
assert_eq!(ruby_config.block_comment_delimiters(), None);
|
||||
assert_eq!(ruby_config.block_comment(), None);
|
||||
|
||||
buffer
|
||||
});
|
||||
|
@ -3490,7 +3526,12 @@ fn html_lang() -> Language {
|
|||
Language::new(
|
||||
LanguageConfig {
|
||||
name: LanguageName::new("HTML"),
|
||||
block_comment: Some(("<!--".into(), "-->".into())),
|
||||
block_comment: Some(BlockCommentConfig {
|
||||
start: "<!--".into(),
|
||||
prefix: "".into(),
|
||||
end: "-->".into(),
|
||||
tab_size: 0,
|
||||
}),
|
||||
..Default::default()
|
||||
},
|
||||
Some(tree_sitter_html::LANGUAGE.into()),
|
||||
|
@ -3521,7 +3562,12 @@ fn erb_lang() -> Language {
|
|||
path_suffixes: vec!["erb".to_string()],
|
||||
..Default::default()
|
||||
},
|
||||
block_comment: Some(("<%#".into(), "%>".into())),
|
||||
block_comment: Some(BlockCommentConfig {
|
||||
start: "<%#".into(),
|
||||
prefix: "".into(),
|
||||
end: "%>".into(),
|
||||
tab_size: 0,
|
||||
}),
|
||||
..Default::default()
|
||||
},
|
||||
Some(tree_sitter_embedded_template::LANGUAGE.into()),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue