feat: add clipboard segment (#898)

* feat: add clipboard segment

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
add-prompt-lookup
Meng Zhang 2023-11-26 11:27:03 +08:00 committed by GitHub
parent a7202318b1
commit 2212171825
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 48 deletions

View File

@ -47,10 +47,12 @@ pub enum Event<'a> {
user: Option<&'a str>,
},
}
#[derive(Serialize)]
pub struct Segments {
pub prefix: String,
pub suffix: Option<String>,
pub clipboard: Option<String>,
}
pub trait EventLogger: Send + Sync {

View File

@ -101,6 +101,9 @@ pub struct Segments {
/// Content that appears after the cursor in the editor window.
suffix: Option<String>,
/// Clipboard content when requesting code completion.
clipboard: Option<String>,
}
impl From<Segments> for api::event::Segments {
@ -108,6 +111,7 @@ impl From<Segments> for api::event::Segments {
Self {
prefix: val.prefix,
suffix: val.suffix,
clipboard: val.clipboard,
}
}
}

View File

@ -192,6 +192,14 @@ mod tests {
PromptBuilder::new(prompt_template, None)
}
fn make_segment(prefix: String, suffix: Option<String>) -> Segments {
Segments {
prefix,
suffix,
clipboard: None,
}
}
#[test]
fn test_prompt_template() {
let pb = create_prompt_builder(true);
@ -202,10 +210,10 @@ mod tests {
// Test w/ prefix, w/ suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("this is some suffix".into()),
};
let segments = make_segment(
"this is some prefix".into(),
Some("this is some suffix".into()),
);
assert_eq!(
pb.build(language, segments, snippets),
"<PRE> this is some prefix <SUF>this is some suffix <MID>"
@ -214,10 +222,7 @@ mod tests {
// Test w/ prefix, w/o suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: None,
};
let segments = make_segment("this is some prefix".into(), None);
assert_eq!(
pb.build(language, segments, snippets),
"<PRE> this is some prefix <SUF>\n <MID>"
@ -226,10 +231,7 @@ mod tests {
// Test w/ prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("".into()),
};
let segments = make_segment("this is some prefix".into(), Some("".into()));
assert_eq!(
pb.build(language, segments, snippets),
"<PRE> this is some prefix <SUF>\n <MID>"
@ -238,10 +240,7 @@ mod tests {
// Test w/ empty prefix, w/ suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("this is some suffix".into()),
};
let segments = make_segment("".into(), Some("this is some suffix".into()));
assert_eq!(
pb.build(language, segments, snippets),
"<PRE> <SUF>this is some suffix <MID>"
@ -250,10 +249,7 @@ mod tests {
// Test w/ empty prefix, w/o suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: None,
};
let segments = make_segment("".into(), None);
assert_eq!(
pb.build(language, segments, snippets),
"<PRE> <SUF>\n <MID>"
@ -262,10 +258,7 @@ mod tests {
// Test w/ emtpy prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("".into()),
};
let segments = make_segment("".into(), Some("".into()));
assert_eq!(
pb.build(language, segments, snippets),
"<PRE> <SUF>\n <MID>"
@ -283,10 +276,10 @@ mod tests {
// Test w/ prefix, w/ suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("this is some suffix".into()),
};
let segments = make_segment(
"this is some prefix".into(),
Some("this is some suffix".into()),
);
assert_eq!(
pb.build(language, segments, snippets),
"this is some prefix"
@ -295,10 +288,7 @@ mod tests {
// Test w/ prefix, w/o suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: None,
};
let segments = make_segment("this is some prefix".into(), None);
assert_eq!(
pb.build(language, segments, snippets),
"this is some prefix"
@ -307,10 +297,7 @@ mod tests {
// Test w/ prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("".into()),
};
let segments = make_segment("this is some prefix".into(), Some("".into()));
assert_eq!(
pb.build(language, segments, snippets),
"this is some prefix"
@ -319,28 +306,19 @@ mod tests {
// Test w/ empty prefix, w/ suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("this is some suffix".into()),
};
let segments = make_segment("".into(), Some("this is some suffix".into()));
assert_eq!(pb.build(language, segments, snippets), "");
}
// Test w/ empty prefix, w/o suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: None,
};
let segments = make_segment("".into(), None);
assert_eq!(pb.build(language, segments, snippets), "");
}
// Test w/ empty prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("".into()),
};
let segments = make_segment("".into(), Some("".into()));
assert_eq!(pb.build(language, segments, snippets), "");
}
}