Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
vnotepad
Exa
提交
0e473bf3
E
Exa
项目概览
vnotepad
/
Exa
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
Exa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0e473bf3
编写于
1月 23, 2015
作者:
B
Ben S
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Upgrade to latest Rust, and move options code
上级
95388e6e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
36 addition
and
25 deletion
+36
-25
src/exa.rs
src/exa.rs
+2
-19
src/file.rs
src/file.rs
+1
-1
src/options.rs
src/options.rs
+33
-5
未找到文件。
src/exa.rs
浏览文件 @
0e473bf3
...
...
@@ -12,7 +12,6 @@ use std::os::{args, set_exit_status};
use
dir
::
Dir
;
use
file
::
File
;
use
options
::
Options
;
use
options
::
Error
::
*
;
pub
mod
column
;
pub
mod
dir
;
...
...
@@ -90,25 +89,9 @@ fn main() {
match
Options
::
getopts
(
args
.tail
())
{
Ok
(
options
)
=>
exa
(
&
options
),
Err
(
Help
(
text
))
=>
{
println!
(
"{}"
,
text
);
set_exit_status
(
2
);
},
Err
(
InvalidOptions
(
e
))
=>
{
Err
(
e
)
=>
{
println!
(
"{}"
,
e
);
set_exit_status
(
3
);
},
Err
(
Conflict
(
a
,
b
))
=>
{
println!
(
"Option --{} conflicts with option {}"
,
a
,
b
);
set_exit_status
(
3
);
},
Err
(
Useless
(
a
,
false
,
b
))
=>
{
println!
(
"Option --{} is useless without option --{}"
,
a
,
b
);
set_exit_status
(
3
);
},
Err
(
Useless
(
a
,
true
,
b
))
=>
{
println!
(
"Option --{} is useless given option --{}"
,
a
,
b
);
set_exit_status
(
3
);
set_exit_status
(
e
.error_code
());
},
};
}
src/file.rs
浏览文件 @
0e473bf3
...
...
@@ -56,7 +56,7 @@ impl<'a> File<'a> {
// The extension is the series of characters after a dot at
// the end of a filename. This deliberately also counts
// dotfiles - the ".git" folder has the extension "git".
name
.rfind
(
'.'
)
.map
(|
p
os
|
name
.slice_from
(
pos
+
1
)
.to_string
())
name
.rfind
(
'.'
)
.map
(|
p
|
name
[
p
+
1
..
]
.to_string
())
}
pub
fn
is_dotfile
(
&
self
)
->
bool
{
...
...
src/options.rs
浏览文件 @
0e473bf3
...
...
@@ -9,8 +9,11 @@ use term::dimensions;
use
std
::
ascii
::
AsciiExt
;
use
std
::
slice
::
Iter
;
use
std
::
fmt
;
#[derive(PartialEq,
Show)]
use
self
::
Error
::
*
;
#[derive(PartialEq,
Debug)]
pub
enum
SortField
{
Unsorted
,
Name
,
Extension
,
Size
,
FileInode
}
...
...
@@ -34,7 +37,7 @@ fn no_sort_field(field: &str) -> Error {
Error
::
InvalidOptions
(
getopts
::
Fail
::
UnrecognizedOption
(
format!
(
"--sort {}"
,
field
)))
}
#[derive(PartialEq,
Show
)]
#[derive(PartialEq,
Debug
)]
pub
struct
Options
{
pub
list_dirs
:
bool
,
pub
path_strs
:
Vec
<
String
>
,
...
...
@@ -44,7 +47,7 @@ pub struct Options {
pub
view
:
View
,
}
#[derive(PartialEq,
Show
)]
#[derive(PartialEq,
Debug
)]
pub
enum
Error
{
InvalidOptions
(
getopts
::
Fail
),
Help
(
String
),
...
...
@@ -52,6 +55,25 @@ pub enum Error {
Useless
(
&
'static
str
,
bool
,
&
'static
str
),
}
impl
Error
{
pub
fn
error_code
(
&
self
)
->
isize
{
if
let
Help
(
_
)
=
*
self
{
2
}
else
{
3
}
}
}
impl
fmt
::
Display
for
Error
{
fn
fmt
(
&
self
,
f
:
&
mut
fmt
::
Formatter
)
->
fmt
::
Result
{
match
*
self
{
InvalidOptions
(
ref
e
)
=>
write!
(
f
,
"{}"
,
e
),
Help
(
ref
text
)
=>
write!
(
f
,
"{}"
,
text
),
Conflict
(
a
,
b
)
=>
write!
(
f
,
"Option --{} conflicts with option {}"
,
a
,
b
),
Useless
(
a
,
false
,
b
)
=>
write!
(
f
,
"Option --{} is useless without option --{}"
,
a
,
b
),
Useless
(
a
,
true
,
b
)
=>
write!
(
f
,
"Option --{} is useless given option --{}"
,
a
,
b
),
}
}
}
impl
Options
{
pub
fn
getopts
(
args
:
&
[
String
])
->
Result
<
Options
,
Error
>
{
let
opts
=
&
[
...
...
@@ -215,6 +237,8 @@ mod test {
use
super
::
Error
;
use
super
::
Error
::
*
;
use
std
::
fmt
;
fn
is_helpful
(
error
:
Result
<
Options
,
Error
>
)
->
bool
{
match
error
{
Err
(
Help
(
_
))
=>
true
,
...
...
@@ -222,6 +246,12 @@ mod test {
}
}
impl
fmt
::
Display
for
Options
{
fn
fmt
(
&
self
,
f
:
&
mut
fmt
::
Formatter
)
->
fmt
::
Result
{
write!
(
f
,
"{:?}"
,
self
)
}
}
#[test]
fn
help
()
{
let
opts
=
Options
::
getopts
(
&
[
"--help"
.to_string
()
]);
...
...
@@ -275,6 +305,4 @@ mod test {
let
opts
=
Options
::
getopts
(
&
[
"--oneline"
.to_string
(),
"--across"
.to_string
()
]);
assert_eq!
(
opts
.unwrap_err
(),
Error
::
Useless
(
"across"
,
true
,
"oneline"
))
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录