Skip to content

Commit f25b676

Browse files
committed
Implement simple continuation.
Fixes #1.
1 parent 928ec29 commit f25b676

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/xinterpreter.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,9 +279,18 @@ __get_cxx_version ()
279279
return kernel_res;
280280
}
281281

282-
nl::json interpreter::is_complete_request_impl(const std::string& /*code*/)
282+
nl::json interpreter::is_complete_request_impl(const std::string& code)
283283
{
284-
return xeus::create_is_complete_reply("complete", " ");
284+
if (!code.empty() && code[code.size() - 1] == '\\') {
285+
auto found = code.rfind('\n');
286+
if (found == std::string::npos)
287+
found = -1;
288+
auto found1 = found++;
289+
while (isspace(code[++found1])) ;
290+
return xeus::create_is_complete_reply("incomplete", code.substr(found, found1-found));
291+
}
292+
293+
return xeus::create_is_complete_reply("complete");
285294
}
286295

287296
nl::json interpreter::kernel_info_request_impl()

test/test_xcpp_kernel.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,32 @@ def test_codecomplete(self) -> None:
3737
self.assertEqual(str(reply["content"]["matches"]), "['float', 'foo']")
3838
self.assertEqual(reply["content"]["status"], "ok")
3939

40+
# Continuation
41+
code_continuation_incomplete = ' int foo = 12; \\\n float bar = 1.5f;\\'
42+
code_continuation_complete = ' int foo = 12; \\\n float bar = 1.5f;'
43+
44+
def test_continuation(self) -> None:
45+
if not self.code_continuation_incomplete or not self.code_continuation_complete:
46+
raise SkipTest("No code continuation sample")
47+
48+
# Incomplete
49+
self.flush_channels()
50+
msg_id = self.kc.is_complete(self.code_continuation_incomplete)
51+
reply = self.get_non_kernel_info_reply(timeout=1)
52+
assert reply is not None
53+
self.assertEqual(reply["msg_type"], "is_complete_reply")
54+
self.assertEqual(str(reply["content"]["indent"]), " ")
55+
self.assertEqual(reply["content"]["status"], "incomplete")
56+
57+
# Complete
58+
self.flush_channels()
59+
msg_id = self.kc.is_complete(self.code_continuation_complete)
60+
reply = self.get_non_kernel_info_reply(timeout=1)
61+
assert reply is not None
62+
self.assertEqual(reply["msg_type"], "is_complete_reply")
63+
self.assertEqual(str(reply["content"]["indent"]), "")
64+
self.assertEqual(reply["content"]["status"], "complete")
65+
4066

4167
class XCppTests(jupyter_kernel_test.KernelTests):
4268

0 commit comments

Comments
 (0)