Skip to content

Commit 11536c0

Browse files
committed
CPT editor: use the marking scope when finding dependencies
Now that undefined function names are considered to be undefined variables, it's more important to make sure that the dependency finder is using the right scope.
1 parent 9316e21 commit 11536c0

3 files changed

Lines changed: 7 additions & 4 deletions

File tree

editor/static/js/custom_part_type/edit.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ $(document).ready(function() {
423423
var CustomPartType = Editor.custom_part_type.CustomPartType = function(data, save_url, set_access_url) {
424424
var pt = this;
425425

426+
this.marking_scope = new Numbas.marking.StatefulScope([Numbas.jme.builtinScope]);
427+
426428
this.save_url = save_url;
427429
this.set_access_url = set_access_url;
428430

@@ -1101,7 +1103,7 @@ $(document).ready(function() {
11011103
if(this.definitionError() || !this.definition_tree()) {
11021104
return [];
11031105
}
1104-
var vars = Numbas.jme.findvars(this.definition_tree());
1106+
var vars = Numbas.jme.findvars(this.definition_tree(), [], pt.marking_scope);
11051107
var note_names = pt.marking_notes().map(function(n) { return n.name().toLowerCase() });
11061108
return vars
11071109
.filter(function(name) { return !marking_reserved_names.contains(name.toLowerCase()) })

editor/static/js/editor.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2008,6 +2008,7 @@ $(document).ready(function() {
20082008
viewModel: function(params) {
20092009
this.expr = params.expr;
20102010
this.vars = params.vars || [];
2011+
this.scope = params.scope || Numbas.jme.builtinScope;
20112012
this.show_syntax_errors = params.show_syntax_errors===undefined ? true : params.show_syntax_errors;
20122013
this.error = ko.pureComputed(function() {
20132014
var expr = ko.unwrap(this.expr);
@@ -2017,7 +2018,7 @@ $(document).ready(function() {
20172018
return this.show_syntax_errors ? e.message : '';
20182019
}
20192020
try {
2020-
var vars = Numbas.jme.findvars(tree);
2021+
var vars = Numbas.jme.findvars(tree, [], scope);
20212022
} catch(e) {
20222023
return '';
20232024
}

editor/templates/custom_part_type/edit.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ <h1 class="name-header">
424424
</label>
425425
<div class="{{form_control_class}}">
426426
<textarea id="input-input_options-correctAnswer" {% if not editable %}disabled{% endif %} data-bind="codemirror: input_options.correctAnswer, codemirrorMode: 'jme'"></textarea>
427-
<undefined-variable-warning params="expr: input_options.correctAnswer, vars: ['settings']"></undefined-variable-warning>
427+
<undefined-variable-warning params="expr: input_options.correctAnswer, vars: ['settings'], scope: $root.marking_scope"></undefined-variable-warning>
428428
{% if editable %}
429429
<p class="help-block">
430430
An expression which evaluates to the expected answer to the part. You can refer to any of the part's settings.
@@ -543,7 +543,7 @@ <h1 class="name-header">
543543
<div class="form-group">
544544
<label for="input-marking_note-definition">Definition</label>
545545
<textarea id="input-marking_note-definition" {% if not editable %}disabled{% endif %} class="definition" data-bind="codemirror: definition"></textarea>
546-
<undefined-variable-warning params="expr: definition, vars: $parent.marking_defined_names, show_syntax_errors: false"></undefined-variable-warning>
546+
<undefined-variable-warning params="expr: definition, vars: $parent.marking_defined_names, show_syntax_errors: false, scope: $root.marking_scope"></undefined-variable-warning>
547547
<div class="alert alert-danger" data-bind="visible: definitionError" aria-live="polite">
548548
<p data-bind="html: definitionError"></p>
549549
</div>

0 commit comments

Comments
 (0)