Search issues by keyword.
(args, data)
| 401 | |
| 402 | |
| 403 | def cmd_search(args, data): |
| 404 | """Search issues by keyword.""" |
| 405 | query = args.query.lower() |
| 406 | query_words = query.split() |
| 407 | issues = all_issues(data) |
| 408 | |
| 409 | if args.state: |
| 410 | state = args.state.upper() |
| 411 | issues = [i for i in issues if i["state"] == state] |
| 412 | |
| 413 | if args.label: |
| 414 | label_lower = args.label.lower() |
| 415 | issues = [i for i in issues if any(label_lower == lbl.lower() for lbl in i["labels"])] |
| 416 | |
| 417 | results = [] |
| 418 | for issue in issues: |
| 419 | text = issue["title"].lower() |
| 420 | if not args.title_only: |
| 421 | text += " " + (issue["body"] or "").lower()[:2000] |
| 422 | if all(w in text for w in query_words): |
| 423 | results.append(issue) |
| 424 | |
| 425 | results.sort(key=lambda i: i["reactions"].get("THUMBS_UP", 0), reverse=True) |
| 426 | n = args.limit or 20 |
| 427 | for issue in results[:n]: |
| 428 | print(format_compact(issue)) |
| 429 | if len(results) > n: |
| 430 | print(f"... {len(results) - n} more results (use --limit to show more)") |
| 431 | elif not results: |
| 432 | print("No results found.") |
| 433 | print(f"\n({len(results)} matches)", file=sys.stderr) |
| 434 | |
| 435 | |
| 436 | def cmd_related(args, data): |
nothing calls this directly
no test coverage detected