Compare commits

...
30 Commits
Author SHA1 Message Date
Martin Angers 7d37930884 Update readme to prepare 1.10 version 2024-09-06 10:34:28 -04:00
Martin Angers 9551ee516e Merge pull request #489 from PuerkitoBio/amikai-itereach-pr
Support EachIter based on Go's 1.23 iterator.
2024-09-06 10:28:29 -04:00
Martin Angers 291e2cf4e3 Merge branch 'master' into amikai-itereach-pr 2024-09-06 10:25:21 -04:00
Martin Angers 7019296f03 Update CI to target go1.23+ 2024-09-06 10:21:11 -04:00
Martin Angers eec8e87fed Revert "Re-orangize code for compitable"
This reverts commit 6802fc5555.
2024-09-06 10:14:32 -04:00
Martin Angers 957a864443 Prepare 1.9.3 release 2024-09-06 10:05:29 -04:00
Martin Angers 34d91dbc67 Merge pull request #488 from PuerkitoBio/dependabot/go_modules/golang.org/x/net-0.29.0
Bump golang.org/x/net from 0.28.0 to 0.29.0
2024-09-06 10:00:00 -04:00
dependabot[bot] 0984c44bae Bump golang.org/x/net from 0.28.0 to 0.29.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.28.0 to 0.29.0.
- [Commits](https://github.com/golang/net/compare/v0.28.0...v0.29.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-06 06:00:31 +00:00
Martin Angers fbfb78c352 Merge pull request #487 from Kiyo510/fix_ci_test
Resolve WARNING in CI of github actions.
2024-08-12 18:08:05 -04:00
Kiyo510 e91ee4d790 Fixed checkout to repo before executing actions/setup-go@v5 step to avoid error that go.mod does not exist 2024-08-12 22:23:40 +09:00
Martin Angers 90131ce208 Merge pull request #485 from PuerkitoBio/dependabot/go_modules/golang.org/x/net-0.28.0
Bump golang.org/x/net from 0.27.0 to 0.28.0
2024-08-07 21:04:20 -04:00
dependabot[bot] 3e5761b538 Bump golang.org/x/net from 0.27.0 to 0.28.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.27.0 to 0.28.0.
- [Commits](https://github.com/golang/net/compare/v0.27.0...v0.28.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-07 05:37:47 +00:00
amikai 6802fc5555 Re-orangize code for compitable
- We don't need to use the iter.Seq2 type; instead, we can use func(yield func(int, *Selection) bool). In fact, the underlying type of iter.Seq2 is func(yield func(int, *Selection) bool), so we don't need to upgrade the go.mod version.
- For for-range testing in version 1.23, we can use build tags to compile only for versions above 1.23.
2024-07-24 15:02:18 +08:00
Martin Angers 466380eec7 Update test.yml (another attempt to use the go1.23 rc version) 2024-07-23 10:08:48 -04:00
Martin Angers 0f5ed94072 Update test.yml to use go1.23rc2 2024-07-23 10:04:34 -04:00
amikai 3f0ba08339 Support EachIter based on 1.23 iterator 2024-07-20 11:38:01 +08:00
amikai 629afd96a7 Bump the version to 1.23 2024-07-20 11:37:24 +08:00
Martin Angers f1f5362a06 Merge pull request #481 from conneroisu/patch-1
Update README.md description for seltabl to include provided language server
2024-07-17 20:42:27 -04:00
connero dd1e02fa62 Update README.md 2024-07-17 17:58:32 -04:00
Martin Angers f9e713566d Merge pull request #480 from PuerkitoBio/dependabot/go_modules/golang.org/x/net-0.27.0
Bump golang.org/x/net from 0.26.0 to 0.27.0
2024-07-08 19:14:06 -04:00
dependabot[bot] fd5dc59310 Bump golang.org/x/net from 0.26.0 to 0.27.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.26.0 to 0.27.0.
- [Commits](https://github.com/golang/net/compare/v0.26.0...v0.27.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 05:45:20 +00:00
Martin Angers b752fff338 Merge pull request #479 from PuerkitoBio/dependabot/go_modules/golang.org/x/net-0.26.0
Bump golang.org/x/net from 0.24.0 to 0.26.0
2024-07-02 21:10:10 -04:00
dependabot[bot] 8bd5b7d432 Bump golang.org/x/net from 0.24.0 to 0.26.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.24.0 to 0.26.0.
- [Commits](https://github.com/golang/net/compare/v0.24.0...v0.26.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-02 21:04:32 +00:00
Martin Angers bf8e18a449 Merge pull request #478 from deining/fix-warnings
Bump GitHub workflows to their latest versions
2024-07-02 17:04:10 -04:00
Andreas Deininger 400486e492 Bump GitHub workflows to their latest versions 2024-07-02 21:54:31 +02:00
Martin Angers 1bc4a06d02 Merge pull request #477 from conneroisu/master
Update README.md
2024-06-09 15:56:11 -04:00
connero bc419c1e56 Update README.md 2024-06-09 12:58:55 -05:00
Martin Angers b076e25085 Prepare for release v1.9.2 2024-04-29 20:41:06 -04:00
Martin Angers 22d8cfd154 Merge pull request #470 from PuerkitoBio/dependabot/go_modules/golang.org/x/net-0.23.0
Bump golang.org/x/net from 0.21.0 to 0.23.0
2024-04-19 11:27:59 -04:00
dependabot[bot] 56c8ec7392 Bump golang.org/x/net from 0.21.0 to 0.23.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.21.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.21.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-19 13:10:04 +00:00
9 changed files with 123 additions and 16 deletions
+5
View File
@@ -5,3 +5,8 @@ updates:
directory: "/"
schedule:
interval: "daily"
# Enable version updates for GitHub action workflows
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
+5 -5
View File
@@ -8,18 +8,18 @@ jobs:
test:
strategy:
matrix:
go-version: [1.21.x, 1.22.x]
go-version: [1.23.x]
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v3
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Checkout code
uses: actions/checkout@v3
- name: Test
run: go test ./... -v -cover
+16 -6
View File
@@ -22,7 +22,13 @@ Syntax-wise, it is as close as possible to jQuery, with the same function names
## Installation
Please note that starting with version `v1.9.0` of goquery, Go 1.18+ is required due to the use of generics. For previous goquery versions, a Go version of 1.1+ was required because of the `net/html` dependency. Ongoing goquery development is tested on the latest 2 versions of Go.
Required Go version:
* Starting with version `v1.10.0` of goquery, Go 1.23+ is required due to the use of function-based iterators.
* For `v1.9.0` of goquery, Go 1.18+ is required due to the use of generics.
* For previous goquery versions, a Go version of 1.1+ was required because of the `net/html` dependency.
Ongoing goquery development is tested on the latest 2 versions of Go.
$ go get github.com/PuerkitoBio/goquery
@@ -40,6 +46,9 @@ Please note that starting with version `v1.9.0` of goquery, Go 1.18+ is required
**Note that goquery's API is now stable, and will not break.**
* **2024-09-06 (v1.10.0)** : Add `EachIter` which provides an iterator that can be used in `for..range` loops on the `*Selection` object. **goquery now requires Go version 1.23+** (thanks [@amikai](https://github.com/amikai)).
* **2024-09-06 (v1.9.3)** : Update `go.mod` dependencies.
* **2024-04-29 (v1.9.2)** : Update `go.mod` dependencies.
* **2024-02-29 (v1.9.1)** : Improve allocation and performance of the `Map` function and `Selection.Map` method, better document the cascadia differences (thanks [@jwilsson](https://github.com/jwilsson)).
* **2024-02-22 (v1.9.0)** : Add a generic `Map` function, **goquery now requires Go version 1.18+** (thanks [@Fesaa](https://github.com/Fesaa)).
* **2023-02-18 (v1.8.1)** : Update `go.mod` dependencies, update CI workflow.
@@ -160,6 +169,7 @@ func main() {
- [goskyr](https://github.com/jakopako/goskyr), an easily configurable command-line scraper written in Go.
- [goGetJS](https://github.com/davemolk/goGetJS), a tool for extracting, searching, and saving JavaScript files (with optional headless browser).
- [fitter](https://github.com/PxyUp/fitter), a tool for selecting values from JSON, XML, HTML and XPath formatted pages.
- [seltabl](github.com/conneroisu/seltabl), an orm-like package and supporting language server for extracting values from HTML
## Support
@@ -182,15 +192,15 @@ There are a number of ways you can support the project:
The [BSD 3-Clause license][bsd], the same as the [Go language][golic]. Cascadia's license is [here][caslic].
[jquery]: http://jquery.com/
[go]: http://golang.org/
[jquery]: https://jquery.com/
[go]: https://go.dev/
[cascadia]: https://github.com/andybalholm/cascadia
[cascadiacli]: https://github.com/suntong/cascadia
[bsd]: http://opensource.org/licenses/BSD-3-Clause
[golic]: http://golang.org/LICENSE
[bsd]: https://opensource.org/licenses/BSD-3-Clause
[golic]: https://go.dev/LICENSE
[caslic]: https://github.com/andybalholm/cascadia/blob/master/LICENSE
[doc]: https://pkg.go.dev/github.com/PuerkitoBio/goquery
[index]: http://api.jquery.com/index/
[index]: https://api.jquery.com/index/
[gonet]: https://github.com/golang/net/
[html]: https://pkg.go.dev/golang.org/x/net/html
[wiki]: https://github.com/PuerkitoBio/goquery/wiki/Tips-and-tricks
+42
View File
@@ -25,6 +25,48 @@ func BenchmarkEach(b *testing.B) {
}
}
func BenchmarkEachIter(b *testing.B) {
var tmp, n int
b.StopTimer()
sel := DocW().Find("td")
b.StartTimer()
for i := 0; i < b.N; i++ {
for range sel.EachIter() {
tmp++
}
if n == 0 {
n = tmp
}
}
if n != 59 {
b.Fatalf("want 59, got %d", n)
}
}
func BenchmarkEachIterWithBreak(b *testing.B) {
var tmp, n int
b.StopTimer()
sel := DocW().Find("td")
b.StartTimer()
for i := 0; i < b.N; i++ {
tmp = 0
for range sel.EachIter() {
tmp++
if tmp >= 10 {
break
}
}
if n == 0 {
n = tmp
}
}
if n != 10 {
b.Fatalf("want 10, got %d", n)
}
}
func BenchmarkMap(b *testing.B) {
var tmp, n int
+1 -1
View File
@@ -62,7 +62,7 @@ func (s *Selection) AddBackFiltered(selector string) *Selection {
}
// AddBackMatcher reduces the previous set of elements on the stack to those that match
// the mateher, and adds them to the curernt set.
// the matcher, and adds them to the current set.
// It returns a new Selection object containing the current Selection combined
// with the filtered previous one
func (s *Selection) AddBackMatcher(m Matcher) *Selection {
+2 -2
View File
@@ -2,7 +2,7 @@ module github.com/PuerkitoBio/goquery
require (
github.com/andybalholm/cascadia v1.3.2
golang.org/x/net v0.21.0
golang.org/x/net v0.29.0
)
go 1.18
go 1.23
+2 -2
View File
@@ -10,8 +10,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+14
View File
@@ -1,5 +1,7 @@
package goquery
import "iter"
// Each iterates over a Selection object, executing a function for each
// matched element. It returns the current Selection object. The function
// f is called for each element in the selection with the index of the
@@ -12,6 +14,18 @@ func (s *Selection) Each(f func(int, *Selection)) *Selection {
return s
}
// EachIter returns an iterator that yields the Selection object in order.
// The implementation is similar to Each, but it returns an iterator instead.
func (s *Selection) EachIter() iter.Seq2[int, *Selection] {
return func(yield func(int, *Selection) bool) {
for i, n := range s.Nodes {
if !yield(i, newSingleSelection(n, s.document)) {
return
}
}
}
}
// EachWithBreak iterates over a Selection object, executing a function for each
// matched element. It is identical to Each except that it is possible to break
// out of the loop by returning false in the callback function. It returns the
+36
View File
@@ -105,3 +105,39 @@ func TestGenericMap(t *testing.T) {
t.Errorf("Expected Map array result to have a length of 3, found %v.", len(vals))
}
}
func TestEachIter(t *testing.T) {
var cnt int
sel := Doc().Find(".hero-unit .row-fluid")
for i, s := range sel.EachIter() {
cnt++
t.Logf("At index %v, node %v", i, s.Nodes[0].Data)
}
sel = sel.Find("a")
if cnt != 4 {
t.Errorf("Expected Each() to call function 4 times, got %v times.", cnt)
}
assertLength(t, sel.Nodes, 6)
}
func TestEachIterWithBreak(t *testing.T) {
var cnt int
sel := Doc().Find(".hero-unit .row-fluid")
for i, s := range sel.EachIter() {
cnt++
t.Logf("At index %v, node %v", i, s.Nodes[0].Data)
break
}
sel = sel.Find("a")
if cnt != 1 {
t.Errorf("Expected Each() to call function 1 time, got %v times.", cnt)
}
assertLength(t, sel.Nodes, 6)
}