Skip to content

Commit 031abc3

Browse files
committed
feat(spec)!: use seq.Iter and rename Iter methods
1 parent 60e08db commit 031abc3

File tree

6 files changed

+26
-27
lines changed

6 files changed

+26
-27
lines changed

document.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dom
22

33
import (
4+
"iter"
45
"strings"
56

67
"github.com/andybalholm/cascadia"
@@ -37,10 +38,10 @@ func (d *Document) QuerySelectorAll(query string) spec.NodeList[spec.Element] {
3738
return querySelectorAll(d.node, query, false)
3839
}
3940

40-
func (d *Document) QuerySelectorEach(query string) spec.NodeIterator[spec.Element] {
41+
func (d *Document) QuerySelectorSequence(query string) iter.Seq[spec.Element] {
4142
m := cascadia.MustCompile(query)
4243
return func(yield func(spec.Element) bool) {
43-
querySelectorEach(d.node, m, yield)
44+
querySelectorSequence(d.node, m, yield)
4445
}
4546
}
4647

element.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dom
22

33
import (
44
"bytes"
5+
"iter"
56
"strings"
67

78
"github.com/andybalholm/cascadia"
@@ -14,10 +15,10 @@ type Element struct {
1415
node *html.Node
1516
}
1617

17-
func (e *Element) QuerySelectorEach(query string) spec.NodeIterator[spec.Element] {
18+
func (e *Element) QuerySelectorSequence(query string) iter.Seq[spec.Element] {
1819
m := cascadia.MustCompile(query)
1920
return func(yield func(spec.Element) bool) {
20-
querySelectorEach(e.node, m, yield)
21+
querySelectorSequence(e.node, m, yield)
2122
}
2223
}
2324

fragment.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dom
22

33
import (
44
"bytes"
5+
"iter"
56
"slices"
67

78
"github.com/andybalholm/cascadia"
@@ -129,7 +130,7 @@ func (d *DocumentFragment) QuerySelectorAll(query string) spec.NodeList[spec.Ele
129130
return slices.Clip(list)
130131
}
131132

132-
func (d *DocumentFragment) QuerySelectorEach(query string) spec.NodeIterator[spec.Element] {
133+
func (d *DocumentFragment) QuerySelectorSequence(query string) iter.Seq[spec.Element] {
133134
m := cascadia.MustCompile(query)
134135
return func(yield func(spec.Element) bool) {
135136
for _, n := range d.nodes {
@@ -138,7 +139,7 @@ func (d *DocumentFragment) QuerySelectorEach(query string) spec.NodeIterator[spe
138139
return
139140
}
140141
}
141-
if !querySelectorEach(n, m, yield) {
142+
if !querySelectorSequence(n, m, yield) {
142143
return
143144
}
144145
}

fragment_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -322,17 +322,17 @@ func TestDocumentFragment_QuerySelector(t *testing.T) {
322322
})
323323
t.Run("tree of nested results", func(t *testing.T) {
324324
fragment := parseDocumentFragment(t,
325-
/* language=html */ `<div id="n0">
326-
<div id="n1">
327-
<div id="n2"></div>
325+
/* language=html */ `<div id='n0'>
326+
<div id='n1'>
327+
<div id='n2'></div>
328328
</div>
329-
<div id="n3"></div>
329+
<div id='n3'></div>
330330
</div>
331-
<div id="n4">
332-
<div id="n5">
333-
<div id="n6"></div>
331+
<div id='n4'>
332+
<div id='n5'>
333+
<div id='n6'></div>
334334
</div>
335-
<div id="n7"></div>
335+
<div id='n7'></div>
336336
</div>`)
337337
results := fragment.QuerySelectorAll("div")
338338
require.NotNil(t, results)
@@ -395,7 +395,7 @@ func TestDocumentFragment_QuerySelectorEach(t *testing.T) {
395395

396396
for stopOnCall := 1; stopOnCall <= 7; stopOnCall++ {
397397
callCount := 0
398-
dom.NewDocumentFragment(fragment).QuerySelectorEach("[id]")(func(el spec.Element) bool {
398+
dom.NewDocumentFragment(fragment).QuerySelectorSequence("[id]")(func(el spec.Element) bool {
399399
callCount++
400400
assert.NotNil(t, el)
401401
if callCount == stopOnCall {

node.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ func querySelectorAll(node *html.Node, query string, includeParent bool) nodeLis
440440
if includeParent && m.Match(node) {
441441
results = slices.Insert(results, 0, node)
442442
}
443-
querySelectorEach(node, m, func(element spec.Element) bool {
443+
querySelectorSequence(node, m, func(element spec.Element) bool {
444444
el := element.(*Element)
445445
results = append(results, el.node)
446446
return true
@@ -494,14 +494,14 @@ func getAttribute(node *html.Node, name string) string {
494494
return ""
495495
}
496496

497-
func querySelectorEach(n *html.Node, m cascadia.Matcher, yield func(spec.Element) bool) bool {
497+
func querySelectorSequence(n *html.Node, m cascadia.Matcher, yield func(spec.Element) bool) bool {
498498
for c := n.FirstChild; c != nil; c = c.NextSibling {
499499
if m.Match(c) {
500500
if !yield(&Element{node: c}) {
501501
return false
502502
}
503503
}
504-
if !querySelectorEach(c, m, yield) {
504+
if !querySelectorSequence(c, m, yield) {
505505
return false
506506
}
507507
}

spec/interfaces.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package spec
22

3+
import "iter"
4+
35
// Node is based on a subset of the methods and types in
46
// https://dom.spec.whatwg.org/#interface-node as of 2021-12-10
57
//
@@ -263,12 +265,6 @@ type Comment interface {
263265
SetData() string
264266
}
265267

266-
type (
267-
NodeIterator[N Node] func(func(N) bool)
268-
269-
// QuerySelectorIterator is a first draft node iterator for Go 1.23 range func iteration.
270-
// I am not sure if I like the name.
271-
QuerySelectorIterator interface {
272-
QuerySelectorEach(query string) NodeIterator[Element]
273-
}
274-
)
268+
type QuerySelectorIterator interface {
269+
QuerySelectorSequence(query string) iter.Seq[Element]
270+
}

0 commit comments

Comments
 (0)