Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow docstring to use single quotes and to not be displayed #27

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions js/widget.js
Original file line number Diff line number Diff line change
Expand Up @@ -205,18 +205,19 @@ function signatureValueChanged() {

function updateLineNumbers() {
const linesSignature = mySignatureCodeMirror.state.doc.toString().split('\n').length;
const linesDocstring = myDocstringCodeMirror.state.doc.toString().split('\n').length;

const docstring = myDocstringCodeMirror.state.doc.toString();
const linesDocstring = docstring == "" ? 0 : docstring.split('\n').length;

// increment line numbers in docstring text area by the number of lines in the signature
myDocstringCodeMirror.dispatch({
effects: guttercomp.reconfigure(
lineNumbers({ formatNumber: n=>linesSignature+n }))
effects: guttercomp.reconfigure(
lineNumbers({ formatNumber: n=> linesDocstring == 0 ? "" : linesSignature+n }))
});

myBodyCodeMirror.dispatch({
effects: guttercomp.reconfigure(
lineNumbers({ formatNumber: n=>linesSignature+linesDocstring+n}))
effects: guttercomp.reconfigure(
lineNumbers({ formatNumber: n=>linesSignature+linesDocstring+n}))
});

}
Expand All @@ -225,7 +226,7 @@ function signatureValueChanged() {
// Set the value from python into the CodeMirror widget in the
// frontend.

const newDocstring = '"""' + model.get('docstring') + '"""';
const newDocstring = model.get('docstring');

if (newDocstring !== myDocstringCodeMirror.state.doc.toString()) {
myDocstringCodeMirror.dispatch({
Expand Down
19 changes: 14 additions & 5 deletions src/widget_code_input/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ def _valid_docstring(self, docstring):
"""
Validate that the docstring do not contain triple double quotes
"""
if '"""' in docstring['value']:
raise TraitError('The docstring cannot contain triple double quotes (""")')
return docstring['value']


Expand All @@ -73,7 +71,7 @@ def __init__( # pylint: disable=too-many-arguments
self,
function_name,
function_parameters="",
docstring="\n",
docstring=None,
function_body="",
code_theme="basicLight",
):
Expand All @@ -94,7 +92,18 @@ def __init__( # pylint: disable=too-many-arguments

self.function_name = function_name
self.function_parameters = function_parameters
self.docstring = docstring
if docstring is None:
# we cannot store docstring as None so we use
# a variable to signify that it was None
self.docstring = ""
self._display_docstring = False
elif docstring.startswith("\"") and docstring.endswith("\""):
# assume the quotation marks have been added so we do not need to add them
self.docstring = docstring
self._display_docstring = True
else:
self.docstring = f"\"\"\"{docstring}\"\"\""
self._display_docstring = True
self.function_body = function_body
self.code_theme = code_theme
self.widget_instance_count_trait=f"{WidgetCodeInput.widget_instance_count}"
Expand All @@ -114,7 +123,7 @@ def full_function_code(self):
including signature, docstring and body
"""
return build_function(
self.function_signature, self.docstring, self.function_body
self.function_signature, self.docstring if self._display_docstring else None, self.function_body
)

@property
Expand Down
5 changes: 2 additions & 3 deletions src/widget_code_input/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,11 @@ def build_pre_body(signature, docstring, indent_level=4):
:param docstring: the (unindented) docstring
:param indent_level: integer number of spaces to prepend to the docstring
"""
if '"""' in docstring:
raise ValueError('Triple double quotes (""") not allowed in docstring')

return "{}\n{}".format(
signature,
prepend_indent('"""{}"""'.format(docstring), indent_level=indent_level),
prepend_indent('' if docstring is None else docstring,
indent_level=indent_level),
)


Expand Down