Skip to content

Commit 7eab574

Browse files
authored
Merge pull request #224 from sunjay/as_span
Created as_span method
2 parents 7457f97 + 2ce2d97 commit 7eab574

File tree

4 files changed

+38
-9
lines changed

4 files changed

+38
-9
lines changed

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ fn main() {
6060
for pair in pairs {
6161
// A pair is a combination of the rule which matched and a span of input
6262
println!("Rule: {:?}", pair.as_rule());
63-
println!("Span: {:?}", pair.clone().into_span());
64-
println!("Text: {}", pair.clone().into_span().as_str());
63+
println!("Span: {:?}", pair.as_span());
64+
println!("Text: {}", pair.as_span().as_str());
6565

6666
// A pair can be converted to an iterator of the tokens which make it up:
6767
for inner_pair in pair.into_inner() {
6868
match inner_pair.as_rule() {
69-
Rule::alpha => println!("Letter: {}", inner_pair.into_span().as_str()),
70-
Rule::digit => println!("Digit: {}", inner_pair.into_span().as_str()),
69+
Rule::alpha => println!("Letter: {}", inner_pair.as_span().as_str()),
70+
Rule::digit => println!("Digit: {}", inner_pair.as_span().as_str()),
7171
_ => unreachable!()
7272
};
7373
}

grammars/benches/json.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ fn consume(pair: Pair<Rule>) -> Json {
4646
_ => unreachable!()
4747
},
4848
Rule::number => Json::Number(pair.as_str().parse().unwrap()),
49-
Rule::string => Json::String(pair.into_span()),
49+
Rule::string => Json::String(pair.as_span()),
5050
Rule::array => Json::Array(pair.into_inner().map(value).collect()),
5151
Rule::object => {
5252
let pairs = pair.into_inner().map(|pos| {
5353
let mut pair = pos.into_inner();
5454

55-
let key = pair.next().unwrap().into_span();
55+
let key = pair.next().unwrap().as_span();
5656
let value = value(pair.next().unwrap());
5757

5858
(key, value)

pest/src/iterators/pair.rs

+30-1
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ impl<'i, R: RuleType> Pair<'i, R> {
102102

103103
/// Returns the `Span` defined by the `Pair`, consuming it.
104104
///
105+
/// **Deprecated.** Please use `as_span` instead.
106+
///
105107
/// # Examples
106108
///
107109
/// ```
@@ -122,7 +124,34 @@ impl<'i, R: RuleType> Pair<'i, R> {
122124
/// assert_eq!(pair.into_span().as_str(), "ab");
123125
/// ```
124126
#[inline]
127+
#[deprecated(since="2.0.0", note="Please use `as_span` instead")]
125128
pub fn into_span(self) -> Span<'i> {
129+
self.as_span()
130+
}
131+
132+
/// Returns the `Span` defined by the `Pair`, **without** consuming it.
133+
///
134+
/// # Examples
135+
///
136+
/// ```
137+
/// # use std::rc::Rc;
138+
/// # use pest;
139+
/// # #[allow(non_camel_case_types)]
140+
/// # #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
141+
/// enum Rule {
142+
/// ab
143+
/// }
144+
///
145+
/// let input = "ab";
146+
/// let pair = pest::state(input, |state| {
147+
/// // generating Token pair with Rule::ab ...
148+
/// # state.rule(Rule::ab, |s| s.match_string("ab"))
149+
/// }).unwrap().next().unwrap();
150+
///
151+
/// assert_eq!(pair.as_span().as_str(), "ab");
152+
/// ```
153+
#[inline]
154+
pub fn as_span(&self) -> Span<'i> {
126155
let start = self.pos(self.start);
127156
let end = self.pos(self.pair());
128157

@@ -207,7 +236,7 @@ impl<'i, R: RuleType> fmt::Debug for Pair<'i, R> {
207236
f,
208237
"Pair {{ rule: {:?}, span: {:?}, inner: {:?} }}",
209238
self.as_rule(),
210-
self.clone().into_span(),
239+
self.clone().as_span(),
211240
self.clone().into_inner()
212241
)
213242
}

pest/tests/json.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -271,13 +271,13 @@ fn consume(pair: Pair<Rule>) -> Json {
271271
_ => unreachable!()
272272
},
273273
Rule::number => Json::Number(pair.as_str().parse().unwrap()),
274-
Rule::string => Json::String(pair.into_span()),
274+
Rule::string => Json::String(pair.as_span()),
275275
Rule::array => Json::Array(pair.into_inner().map(value).collect()),
276276
Rule::object => {
277277
let pairs = pair.into_inner().map(|pos| {
278278
let mut pair = pos.into_inner();
279279

280-
let key = pair.next().unwrap().into_span();
280+
let key = pair.next().unwrap().as_span();
281281
let value = value(pair.next().unwrap());
282282

283283
(key, value)

0 commit comments

Comments
 (0)