|
|
@ -145,7 +145,7 @@ pub fn languages_all() -> std::io::Result<()> {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
let mut headings = vec!["Language", "LSP", "DAP"];
|
|
|
|
let mut headings = vec!["Language", "LSP", "DAP", "Formatter"];
|
|
|
|
|
|
|
|
|
|
|
|
for feat in TsFeature::all() {
|
|
|
|
for feat in TsFeature::all() {
|
|
|
|
headings.push(feat.short_title())
|
|
|
|
headings.push(feat.short_title())
|
|
|
@ -203,6 +203,12 @@ pub fn languages_all() -> std::io::Result<()> {
|
|
|
|
let dap = lang.debugger.as_ref().map(|dap| dap.command.as_str());
|
|
|
|
let dap = lang.debugger.as_ref().map(|dap| dap.command.as_str());
|
|
|
|
check_binary(dap);
|
|
|
|
check_binary(dap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let formatter = lang
|
|
|
|
|
|
|
|
.formatter
|
|
|
|
|
|
|
|
.as_ref()
|
|
|
|
|
|
|
|
.map(|formatter| formatter.command.as_str());
|
|
|
|
|
|
|
|
check_binary(formatter);
|
|
|
|
|
|
|
|
|
|
|
|
for ts_feat in TsFeature::all() {
|
|
|
|
for ts_feat in TsFeature::all() {
|
|
|
|
match load_runtime_file(&lang.language_id, ts_feat.runtime_filename()).is_ok() {
|
|
|
|
match load_runtime_file(&lang.language_id, ts_feat.runtime_filename()).is_ok() {
|
|
|
|
true => column("✓", Color::Green),
|
|
|
|
true => column("✓", Color::Green),
|
|
|
@ -285,6 +291,13 @@ pub fn language(lang_str: String) -> std::io::Result<()> {
|
|
|
|
lang.debugger.as_ref().map(|dap| dap.command.to_string()),
|
|
|
|
lang.debugger.as_ref().map(|dap| dap.command.to_string()),
|
|
|
|
)?;
|
|
|
|
)?;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
probe_protocol(
|
|
|
|
|
|
|
|
"formatter",
|
|
|
|
|
|
|
|
lang.formatter
|
|
|
|
|
|
|
|
.as_ref()
|
|
|
|
|
|
|
|
.map(|formatter| formatter.command.to_string()),
|
|
|
|
|
|
|
|
)?;
|
|
|
|
|
|
|
|
|
|
|
|
for ts_feat in TsFeature::all() {
|
|
|
|
for ts_feat in TsFeature::all() {
|
|
|
|
probe_treesitter_feature(&lang_str, *ts_feat)?
|
|
|
|
probe_treesitter_feature(&lang_str, *ts_feat)?
|
|
|
|
}
|
|
|
|
}
|
|
|
|