* 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 { commit, version } from "./constants"
|
||||
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.
|
||||
@ -69,14 +69,15 @@ export const openInExistingInstance = async (args: DefaultedArgs, socketPath: st
|
||||
fileURIs: [],
|
||||
forceReuseWindow: args["reuse-window"],
|
||||
forceNewWindow: args["new-window"],
|
||||
gotoLineMode: true,
|
||||
}
|
||||
const paths = args._ || []
|
||||
for (let i = 0; i < paths.length; i++) {
|
||||
const fp = path.resolve(paths[i])
|
||||
if (await isFile(fp)) {
|
||||
pipeArgs.fileURIs.push(fp)
|
||||
} else {
|
||||
if (await isDirectory(fp)) {
|
||||
pipeArgs.folderURIs.push(fp)
|
||||
} else {
|
||||
pipeArgs.fileURIs.push(fp)
|
||||
}
|
||||
}
|
||||
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 '.
|
||||
*
|
||||
|
@ -457,17 +457,40 @@ describe("isFile", () => {
|
||||
afterEach(async () => {
|
||||
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)
|
||||
})
|
||||
it("should return true if is file", async () => {
|
||||
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)
|
||||
})
|
||||
})
|
||||
|
||||
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", () => {
|
||||
it("should return an empty string if no path provided", () => {
|
||||
const mockHomedir = "/home/coder"
|
||||
|
Reference in New Issue
Block a user