Skip to content

Commit b044744

Browse files
authored
Merge pull request #723 from JunoLab/avi/jsfypaths
JSfy paths.coffee
2 parents 2f37768 + a20dfcc commit b044744

File tree

2 files changed

+147
-125
lines changed

2 files changed

+147
-125
lines changed

lib/misc/paths.coffee

Lines changed: 0 additions & 125 deletions
This file was deleted.

lib/misc/paths.js

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
/** @babel */
2+
3+
import path from 'path'
4+
import fs from 'fs'
5+
import child_process from 'child_process'
6+
7+
export function home (...p) {
8+
const key = process.platform === 'win32' ? 'USERPROFILE' : 'HOME'
9+
return path.join(process.env[key], ...p)
10+
}
11+
12+
export function juliaHome (...p) {
13+
const juliaHome = (process.env.JULIA_HOME || home('.julia'))
14+
return path.join(juliaHome, ...p)
15+
}
16+
17+
export function jlpath () {
18+
return expandHome(atom.config.get('julia-client.juliaPath'))
19+
}
20+
21+
export function expandHome (p) {
22+
return p.startsWith('~') ? p.replace('~', home()) : p
23+
}
24+
25+
export function fullPath (p) {
26+
return new Promise((resolve, reject) => {
27+
if (fs.existsSync(p)) return resolve(p)
28+
const current_dir = process.cwd()
29+
const exepath = path.dirname(process.execPath)
30+
try {
31+
process.chdir(exepath)
32+
const realpath = fs.realpathSync(p)
33+
fs.existsSync(realpath) && resolve(realpath)
34+
} catch (err) {
35+
console.log(err)
36+
} finally {
37+
try {
38+
process.chdir(current_dir)
39+
} catch (err) {
40+
console.error(err)
41+
}
42+
}
43+
if (process.platform === 'win32') {
44+
if (/[a-zA-Z]\:/.test(p)) return reject("Couldn't resolve path.")
45+
}
46+
const which = process.platform === 'win32' ? 'where' : 'which'
47+
child_process.exec(`${which} "${p}"`, (err, stdout, stderr) => {
48+
if (err) return reject(stderr)
49+
const p = stdout.trim()
50+
if (fs.existsSync(p)) return resolve(p)
51+
return reject('Couldn\'t resolve path.')
52+
})
53+
})
54+
}
55+
56+
export function getVersion (path = jlpath()) {
57+
return new Promise((resolve, reject) => {
58+
child_process.exec(`"${path}" --version`, (err, stdout, stderr) => {
59+
if (err) return reject(stderr)
60+
const res = stdout.match(/(\d+)\.(\d+)\.(\d+)/)
61+
if (!res) return reject('Couldn\'t resolve version.')
62+
const [_, major, minor, patch] = res
63+
return resolve({ major, minor, patch })
64+
})
65+
})
66+
}
67+
68+
export function projectDir () {
69+
if (atom.config.get('julia-client.juliaOptions.persistWorkingDir')) {
70+
return new Promise(resolve => {
71+
const p = atom.config.get('julia-client.juliaOptions.workingDir')
72+
try {
73+
fs.stat(p, (err, stats) => {
74+
if (err) {
75+
return resolve(atomProjectDir())
76+
} else {
77+
return resolve(p)
78+
}
79+
})
80+
} catch (err) {
81+
return resolve(atomProjectDir())
82+
}
83+
})
84+
} else {
85+
return atomProjectDir()
86+
}
87+
}
88+
89+
function atomProjectDir () {
90+
const dirs = atom.workspace.project.getDirectories()
91+
let ws = process.env.HOME
92+
if (!ws) {
93+
ws = process.env.USERPROFILE
94+
}
95+
if (dirs.length === 0 || dirs[0].path.match('app.asar')) {
96+
return Promise.resolve(ws)
97+
}
98+
return new Promise(resolve => {
99+
// use the first open project folder (or its parent folder for files) if
100+
// it is valid
101+
try {
102+
fs.stat(dirs[0].path, (err, stats) => {
103+
if (err) return resolve(ws)
104+
if (stats.isFile()) return resolve(path.dirname(dirs[0].path))
105+
return resolve(dirs[0].path)
106+
})
107+
} catch (err) {
108+
return resolve(ws)
109+
}
110+
})
111+
}
112+
113+
function packageDir (...s) {
114+
const packageRoot = path.resolve(__dirname, '..', '..')
115+
return path.join(packageRoot, ...s)
116+
}
117+
118+
export const script = (...s) => packageDir('script', ...s)
119+
120+
export function getPathFromTreeView (el) {
121+
// invoked from tree-view context menu
122+
let pathEl = el.closest('[data-path]')
123+
if (!pathEl) {
124+
// invoked from command with focusing on tree-view
125+
const activeEl = el.querySelector('.tree-view .selected')
126+
if (activeEl) pathEl = activeEl.querySelector('[data-path]')
127+
}
128+
if (pathEl) return pathEl.dataset.path
129+
return null
130+
}
131+
132+
export function getDirPathFromTreeView (el) {
133+
// invoked from tree-view context menu
134+
let dirEl = el.closest('.directory')
135+
if (!dirEl) {
136+
// invoked from command with focusing on tree-view
137+
const activeEl = el.querySelector('.tree-view .selected')
138+
if (activeEl) dirEl = activeEl.closest('.directory')
139+
}
140+
if (dirEl) {
141+
const pathEl = dirEl.querySelector('[data-path]')
142+
if (pathEl) return pathEl.dataset.path
143+
}
144+
return null
145+
}
146+
147+
export const readCode = (path) => fs.readFileSync(path, 'utf-8')

0 commit comments

Comments
 (0)