mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-22 18:24:21 +01:00
Add support for R formatter in formatters (#3918)
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
This commit is contained in:
@@ -8,7 +8,10 @@ import { readableStreamToText } from "bun"
|
|||||||
export namespace BunProc {
|
export namespace BunProc {
|
||||||
const log = Log.create({ service: "bun" })
|
const log = Log.create({ service: "bun" })
|
||||||
|
|
||||||
export async function run(cmd: string[], options?: Bun.SpawnOptions.OptionsObject<any, any, any>) {
|
export async function run(
|
||||||
|
cmd: string[],
|
||||||
|
options?: Bun.SpawnOptions.OptionsObject<any, any, any>,
|
||||||
|
) {
|
||||||
log.info("running", {
|
log.info("running", {
|
||||||
cmd: [which(), ...cmd],
|
cmd: [which(), ...cmd],
|
||||||
...options,
|
...options,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { readableStreamToText } from "bun"
|
||||||
import { BunProc } from "../bun"
|
import { BunProc } from "../bun"
|
||||||
import { Instance } from "../project/instance"
|
import { Instance } from "../project/instance"
|
||||||
import { Filesystem } from "../util/filesystem"
|
import { Filesystem } from "../util/filesystem"
|
||||||
@@ -131,7 +132,21 @@ export const zig: Info = {
|
|||||||
export const clang: Info = {
|
export const clang: Info = {
|
||||||
name: "clang-format",
|
name: "clang-format",
|
||||||
command: ["clang-format", "-i", "$FILE"],
|
command: ["clang-format", "-i", "$FILE"],
|
||||||
extensions: [".c", ".cc", ".cpp", ".cxx", ".c++", ".h", ".hh", ".hpp", ".hxx", ".h++", ".ino", ".C", ".H"],
|
extensions: [
|
||||||
|
".c",
|
||||||
|
".cc",
|
||||||
|
".cpp",
|
||||||
|
".cxx",
|
||||||
|
".c++",
|
||||||
|
".h",
|
||||||
|
".hh",
|
||||||
|
".hpp",
|
||||||
|
".hxx",
|
||||||
|
".h++",
|
||||||
|
".ino",
|
||||||
|
".C",
|
||||||
|
".H",
|
||||||
|
],
|
||||||
async enabled() {
|
async enabled() {
|
||||||
const items = await Filesystem.findUp(".clang-format", Instance.directory, Instance.worktree)
|
const items = await Filesystem.findUp(".clang-format", Instance.directory, Instance.worktree)
|
||||||
return items.length > 0
|
return items.length > 0
|
||||||
@@ -177,6 +192,33 @@ export const ruff: Info = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const rlang: Info = {
|
||||||
|
name: "air",
|
||||||
|
command: ["air", "format", "$FILE"],
|
||||||
|
extensions: [".R"],
|
||||||
|
async enabled() {
|
||||||
|
const airPath = Bun.which("air")
|
||||||
|
if (airPath == null) return false
|
||||||
|
|
||||||
|
try {
|
||||||
|
const proc = Bun.spawn(["air", "--help"], {
|
||||||
|
stdout: "pipe",
|
||||||
|
stderr: "pipe",
|
||||||
|
})
|
||||||
|
await proc.exited
|
||||||
|
const output = await readableStreamToText(proc.stdout)
|
||||||
|
|
||||||
|
// Check for "Air: An R language server and formatter"
|
||||||
|
const firstLine = output.split("\n")[0]
|
||||||
|
const hasR = firstLine.includes("R language")
|
||||||
|
const hasFormatter = firstLine.includes("formatter")
|
||||||
|
return hasR && hasFormatter
|
||||||
|
} catch (error) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
export const uvformat: Info = {
|
export const uvformat: Info = {
|
||||||
name: "uv format",
|
name: "uv format",
|
||||||
command: ["uv", "format", "--", "$FILE"],
|
command: ["uv", "format", "--", "$FILE"],
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ export namespace Format {
|
|||||||
log.info("checking", { name: item.name, ext })
|
log.info("checking", { name: item.name, ext })
|
||||||
if (!item.extensions.includes(ext)) continue
|
if (!item.extensions.includes(ext)) continue
|
||||||
if (!(await isEnabled(item))) continue
|
if (!(await isEnabled(item))) continue
|
||||||
|
log.info("enabled", { name: item.name, ext })
|
||||||
result.push(item)
|
result.push(item)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ OpenCode comes with several built-in formatters for popular languages and framew
|
|||||||
| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` command available |
|
| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` command available |
|
||||||
| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` command available |
|
| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` command available |
|
||||||
| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` command available |
|
| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` command available |
|
||||||
|
| air | .R | `air` command available |
|
||||||
|
|
||||||
So if your project has `prettier` in your `package.json`, OpenCode will automatically use it.
|
So if your project has `prettier` in your `package.json`, OpenCode will automatically use it.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user