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

Added current_line variable to track current line #14661

Closed
wants to merge 6 commits into from
Next

Added current_line variable to Sink and set_current_line function. Ad…

…ded line_number parameter to Element::create function and set corresponding calls to this function to take in 1 for line_number argument
  • Loading branch information
karenher committed Dec 21, 2016
commit 24d5f8b3f4a9e03278ad03f76dfb94e15b48d222
@@ -276,7 +276,8 @@ fn create_html_element(name: QualName,
pub fn create_element(name: QualName,
prefix: Option<Prefix>,
document: &Document,
creator: ElementCreator)
creator: ElementCreator,
line_number: u64)

This comment has been minimized.

Copy link
@jdm

jdm Dec 22, 2016

Member

Given how many places end up creating elements and passing fake line number values, I propose we modify the ElementCreator enum such that the ParserCreated variant takes a line number argument instead. This will mean that we don't need an extra argument here.

-> Root<Element> {
// FIXME(ajeffrey): Convert directly from Prefix to DOMString.

@@ -2427,7 +2427,7 @@ impl DocumentMethods for Document {
local_name.make_ascii_lowercase();
}
let name = QualName::new(ns!(html), LocalName::from(local_name));
Ok(Element::create(name, None, self, ElementCreator::ScriptCreated))
Ok(Element::create(name, None, self, ElementCreator::ScriptCreated, 1))
}

// https://dom.spec.whatwg.org/#dom-document-createelementns
@@ -2438,7 +2438,7 @@ impl DocumentMethods for Document {
let (namespace, prefix, local_name) = try!(validate_and_extract(namespace,
&qualified_name));
let name = QualName::new(namespace, local_name);
Ok(Element::create(name, prefix, self, ElementCreator::ScriptCreated))
Ok(Element::create(name, prefix, self, ElementCreator::ScriptCreated, 1))
}

// https://dom.spec.whatwg.org/#dom-document-createattribute
@@ -2691,7 +2691,7 @@ impl DocumentMethods for Document {
Some(elem) => Root::upcast::<Node>(elem),
None => {
let name = QualName::new(ns!(svg), local_name!("title"));
let elem = Element::create(name, None, self, ElementCreator::ScriptCreated);
let elem = Element::create(name, None, self, ElementCreator::ScriptCreated, 1);
let parent = root.upcast::<Node>();
let child = elem.upcast::<Node>();
parent.InsertBefore(child, parent.GetFirstChild().r())
@@ -2711,7 +2711,7 @@ impl DocumentMethods for Document {
let elem = Element::create(name,
None,
self,
ElementCreator::ScriptCreated);
ElementCreator::ScriptCreated, 1);
head.upcast::<Node>()
.AppendChild(elem.upcast())
.unwrap()
@@ -173,9 +173,9 @@ impl<'a> TryFrom<&'a str> for AdjacentPosition {
//
impl Element {
pub fn create(name: QualName, prefix: Option<Prefix>,
document: &Document, creator: ElementCreator)
document: &Document, creator: ElementCreator, line_number: u64)
-> Root<Element> {
create_element(name, prefix, document, creator)
create_element(name, prefix, document, creator, line_number)
}

pub fn new_inherited(local_name: LocalName,
@@ -1884,7 +1884,7 @@ impl ElementMethods for Element {
NodeTypeId::DocumentFragment => {
let body_elem = Element::create(QualName::new(ns!(html), local_name!("body")),
None, &context_document,
ElementCreator::ScriptCreated);
ElementCreator::ScriptCreated, 1);
Root::upcast(body_elem)
},
_ => context_node.GetParentElement().unwrap()
@@ -1737,7 +1737,7 @@ impl Node {
};
let element = Element::create(name,
element.prefix().map(|p| Prefix::from(&**p)),
&document, ElementCreator::ScriptCreated);
&document, ElementCreator::ScriptCreated, 1);
Root::upcast::<Node>(element)
},
};
@@ -51,6 +51,7 @@ impl Tokenizer {
let sink = Sink {
base_url: url,
document: JS::from_ref(document),
current_line: 1,
};

let options = TreeBuilderOpts {
@@ -121,6 +122,7 @@ unsafe impl JSTraceable for HtmlTokenizer<TreeBuilder<JS<Node>, Sink>> {
struct Sink {
base_url: ServoUrl,
document: JS<Document>,
current_line: u64,
}

impl<'a> TreeSink for Sink {
@@ -155,7 +157,7 @@ impl<'a> TreeSink for Sink {
fn create_element(&mut self, name: QualName, attrs: Vec<Attribute>)
-> JS<Node> {
let elem = Element::create(name, None, &*self.document,
ElementCreator::ParserCreated);
ElementCreator::ParserCreated, 1);

This comment has been minimized.

Copy link
@jdm

jdm Dec 22, 2016

Member

This should use the current_line variable instead.


for attr in attrs {
elem.set_attribute_from_parser(attr.name, DOMString::from(String::from(attr.value)), None);
@@ -229,6 +231,10 @@ impl<'a> TreeSink for Sink {
}

}

fn set_current_line(&mut self, line_number: u64) {
self.current_line = line_number;
}
}

fn insert(parent: &Node, reference_child: Option<&Node>, child: NodeOrText<JS<Node>>) {
@@ -129,7 +129,7 @@ impl<'a> TreeSink for Sink {
local: name.local,
};
let elem = Element::create(name, prefix, &*self.document,
ElementCreator::ParserCreated);
ElementCreator::ParserCreated, 1);

This comment has been minimized.

Copy link
@jdm

jdm Dec 22, 2016

Member

We should add a TODO comment here to add similar APIs to servo/html5ever#240 to the xml5ever parser (which is separate from but similar to html5ever).


for attr in attrs {
let name = QualName {
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.