aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/vim-snippets/snippets/rust.snippets
blob: 20532f735d8c6770098b0e477593d28436558284 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#################
# Rust Snippets #
#################

# Functions
snippet fn "Function definition"
	fn ${1:function_name}(${2})${3} {
		${0}
	}
snippet pfn "Function definition"
	pub fn ${1:function_name}(${2})${3} {
		${0}
	}
snippet test "Unit test function"
	#[test]
	fn ${1:test_function_name}() {
		${0}
	}
snippet bench "Bench function" b
	#[bench]
	fn ${1:bench_function_name}(b: &mut test::Bencher) {
		b.iter(|| {
			${0}
		})
	}
snippet new "Constructor function"
	pub fn new(${2}) -> ${1:Name} {
		$1 { ${3} }
	}
snippet main "Main function"
	pub fn main() {
		${0}
	}
snippet let "let variable declaration with type inference"
	let ${1}  = ${2};
snippet lett "let variable declaration with explicit type annotation"
	let ${1}: ${2}  = ${3};
snippet letm "let mut variable declaration with type inference"
	let mut ${1}  = ${2};
snippet lettm "let mut variable declaration with explicit type annotation"
	let mut ${1}: ${2}  = ${3};
snippet pln "println!"
	println!("${1}");
snippet pln, "println! with format param"
	println!("${1}", ${2});
# Modules
snippet ec "extern crate"
	extern crate ${1:sync};
snippet ecl "extern crate log"
	#[macro_use]
	extern crate log;
snippet mod
	mod ${1:`substitute(vim_snippets#Filename(), '\(_\|^\)\(.\)', '\u\2', 'g')`} {
		${0}
	} /* $1 */
snippet testmod "Test module" b
	#[cfg(test)]
	mod tests {
		use super::${1:*};

		test${0}
	}
# Attributes
snippet allow "allow lint attribute" b
	#[allow(${1:unused_variable})]
snippet cfg "cfg attribute" b
	#[cfg(${1:target_os = "linux"})]
snippet feat "feature attribute" b
	#![feature(${1:plugin})]
snippet der "#[derive(..)]" b
	#[derive(${1:Debug})]
snippet attr "#[..]" b
	#[${1:inline}]
snippet crate "Define create meta attributes"
	// Crate name
	#![crate_name = "${1:crate_name}"]
	// Additional metadata attributes
	#![desc = "${2:Descrption.}"]
	#![license = "${3:BSD}"]
	#![comment = "${4:Comment.}"]
	// Specify the output type
	#![crate_type = "${5:lib}"]
# Common types
snippet opt "Option<T>"
	Option<${1:i32}>
snippet res "Result<T, E>"
	Result<${1:~str}, ${2:()}>
# Control structures
snippet if
	if ${1} {
		${0}
	}
snippet ife "if / else"
	if ${1} {
		${2}
	} else {
		${0}
	}
snippet el "else"
	else {
		${0}
	}
snippet eli "else if"
	else if ${1} {
		${0}
	}
snippet mat "match pattern"
	match ${1} {
		${2} => ${3}
	}
snippet case "Case clause of pattern match"
	${1:_} => ${2:expression}
snippet loop "loop {}" b
	loop {
		${0}
	}
snippet wh "while loop"
	while ${1:condition} {
		${0}
	}
snippet for "for ... in ... loop"
	for ${1:i} in ${2} {
		${0}
	}
# TODO commenting
snippet todo "TODO comment"
	// [TODO]: ${0:Description}
snippet fixme "FIXME comment"
	// FIXME: $0
# Struct
snippet st "Struct definition"
	struct ${1:`substitute(vim_snippets#Filename(), '\(_\|^\)\(.\)', '\u\2', 'g')`} {
		${0}
	}
snippet impl "Struct/Trait implementation"
	impl ${1:Type/Trait}${2: for ${3:Type}} {
		${0}
	}
snippet stn "Struct with new constructor"
	pub struct ${1:`substitute(vim_snippets#Filename(), '\(_\|^\)\(.\)', '\u\2', 'g')`} {
		${0}
	}

	impl $1 {
		pub fn new(${2}) -> $1 {
			$1 { ${3} }
		}
	}
snippet type "Type alias"
	type ${1:NewName} = $2;
snippet enum "enum definition"
	enum ${1:Name} {
		${2},
	}
# Traits
snippet trait "Trait definition"
	trait ${1:Name} {
		${0}
	}
snippet drop "Drop trait implementation (destructor)"
	impl Drop for ${1:Name} {
		fn drop(&mut self) {
			${0}
		}
	}
# Statics
snippet ss "static string declaration"
	static ${1}: &'static str = "${0}";
snippet stat "static item declaration"
	static ${1}: ${2:usize} = ${0};
# Concurrency
snippet scoped "spawn a scoped thread"
	thread::scoped(${1:move }|| {
		${0}
	});
snippet spawn "spawn a thread"
	thread::spawn(${1:move }|| {
		${0}
	});
snippet chan "Declare (Sender, Receiver) pair of asynchronous channel()"
	let (${1:tx}, ${2:rx}): (Sender<${3:i32}>, Receiver<${4:i32}>) = channel();
# Testing
snippet as "assert!"
	assert!(${1:predicate})
snippet ase "assert_eq!"
	assert_eq!(${1:expected}, ${2:actual})