mirror of https://github.com/coder/code-server.git
* Allow opening files at a specific line and column (fixes #5619) * Add isDirectory test
This commit is contained in:
parent
3a9eb312b1
commit
b562d4a880
|
@ -9,7 +9,7 @@ import { AuthType, DefaultedArgs, Feature, SpawnCodeCli, toCodeArgs, UserProvide
|
||||||
import { coderCloudBind } from "./coder_cloud"
|
import { coderCloudBind } from "./coder_cloud"
|
||||||
import { commit, version } from "./constants"
|
import { commit, version } from "./constants"
|
||||||
import { register } from "./routes"
|
import { register } from "./routes"
|
||||||
import { humanPath, isFile, loadAMDModule, open } from "./util"
|
import { humanPath, isDirectory, loadAMDModule, open } from "./util"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the user passed an extension-related VS Code flag.
|
* Return true if the user passed an extension-related VS Code flag.
|
||||||
|
@ -69,14 +69,15 @@ export const openInExistingInstance = async (args: DefaultedArgs, socketPath: st
|
||||||
fileURIs: [],
|
fileURIs: [],
|
||||||
forceReuseWindow: args["reuse-window"],
|
forceReuseWindow: args["reuse-window"],
|
||||||
forceNewWindow: args["new-window"],
|
forceNewWindow: args["new-window"],
|
||||||
|
gotoLineMode: true,
|
||||||
}
|
}
|
||||||
const paths = args._ || []
|
const paths = args._ || []
|
||||||
for (let i = 0; i < paths.length; i++) {
|
for (let i = 0; i < paths.length; i++) {
|
||||||
const fp = path.resolve(paths[i])
|
const fp = path.resolve(paths[i])
|
||||||
if (await isFile(fp)) {
|
if (await isDirectory(fp)) {
|
||||||
pipeArgs.fileURIs.push(fp)
|
|
||||||
} else {
|
|
||||||
pipeArgs.folderURIs.push(fp)
|
pipeArgs.folderURIs.push(fp)
|
||||||
|
} else {
|
||||||
|
pipeArgs.fileURIs.push(fp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pipeArgs.forceNewWindow && pipeArgs.fileURIs.length > 0) {
|
if (pipeArgs.forceNewWindow && pipeArgs.fileURIs.length > 0) {
|
||||||
|
|
|
@ -482,6 +482,15 @@ export const isFile = async (path: string): Promise<boolean> => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const isDirectory = async (path: string): Promise<boolean> => {
|
||||||
|
try {
|
||||||
|
const stat = await fs.stat(path)
|
||||||
|
return stat.isDirectory()
|
||||||
|
} catch (error) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Escapes any HTML string special characters, like &, <, >, ", and '.
|
* Escapes any HTML string special characters, like &, <, >, ", and '.
|
||||||
*
|
*
|
||||||
|
|
|
@ -457,17 +457,40 @@ describe("isFile", () => {
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await fs.rm(testDir, { recursive: true, force: true })
|
await fs.rm(testDir, { recursive: true, force: true })
|
||||||
})
|
})
|
||||||
it("should return false if the path doesn't exist", async () => {
|
it("should return false if is directory", async () => {
|
||||||
expect(await util.isFile(testDir)).toBe(false)
|
expect(await util.isFile(testDir)).toBe(false)
|
||||||
})
|
})
|
||||||
it("should return true if is file", async () => {
|
it("should return true if is file", async () => {
|
||||||
expect(await util.isFile(pathToFile)).toBe(true)
|
expect(await util.isFile(pathToFile)).toBe(true)
|
||||||
})
|
})
|
||||||
it("should return false if error", async () => {
|
it("should return false if the path doesn't exist", async () => {
|
||||||
expect(await util.isFile("fakefile.txt")).toBe(false)
|
expect(await util.isFile("fakefile.txt")).toBe(false)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("isDirectory", () => {
|
||||||
|
const testDir = path.join(tmpdir, "tests", "isDirectory")
|
||||||
|
let pathToFile = ""
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
pathToFile = path.join(testDir, "foo.txt")
|
||||||
|
await fs.mkdir(testDir, { recursive: true })
|
||||||
|
await fs.writeFile(pathToFile, "hello")
|
||||||
|
})
|
||||||
|
afterEach(async () => {
|
||||||
|
await fs.rm(testDir, { recursive: true, force: true })
|
||||||
|
})
|
||||||
|
it("should return false if is a file", async () => {
|
||||||
|
expect(await util.isDirectory(pathToFile)).toBe(false)
|
||||||
|
})
|
||||||
|
it("should return true if is directory", async () => {
|
||||||
|
expect(await util.isDirectory(testDir)).toBe(true)
|
||||||
|
})
|
||||||
|
it("should return false if the path doesn't exist", async () => {
|
||||||
|
expect(await util.isDirectory("fakefile.txt")).toBe(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("humanPath", () => {
|
describe("humanPath", () => {
|
||||||
it("should return an empty string if no path provided", () => {
|
it("should return an empty string if no path provided", () => {
|
||||||
const mockHomedir = "/home/coder"
|
const mockHomedir = "/home/coder"
|
||||||
|
|
Loading…
Reference in New Issue