2 पॉइंट द्वारा GN⁺ 2025-10-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • ripgrep 15.0 एक प्रमुख रिलीज़ है, जिसमें bug fixes, performance improvements और नए features सहित कई अपडेट शामिल हैं
  • gitignore नियम लागू करने से जुड़े कई bugs ठीक किए गए हैं, और बड़ी फ़ाइलों को संभालते समय memory optimization किया गया है
  • Windows aarch64 platform support जोड़ा गया है, और powerpc64 support बंद कर दिया गया है
  • कुछ नए features में --json और replacement flag का एक साथ support, globs में nested braces support आदि शामिल हैं
  • कुल मिलाकर performance improvements, error fixes और usability enhancements से developers की productivity बढ़ती है

ripgrep 15.0 अवलोकन

ripgrep 15.0, ripgrep का नवीनतम major version release है, जिसमें मुख्य रूप से bug fixes, मामूली performance improvements और छोटे नए features शामिल हैं

ripgrep एक tool है जो current directory में line-by-line regular expression patterns को recursively search करता है
डिफ़ॉल्ट रूप से यह gitignore rules का पालन करता है, और hidden files/directories तथा binary files को अपने आप skip कर देता है

प्रमुख बदलाव

  • कई gitignore matching से जुड़े bugs ठीक किए गए हैं
    • parent directory के gitignore rules के लागू होने से जुड़ा अक्सर रिपोर्ट किया गया bug हल किया गया
  • बहुत बड़े gitignore files को process करते समय होने वाला memory usage spike bug ठीक किया गया
  • rg -vf file में, जब file खाली हो, तो अब यह सब कुछ match करता है
  • -r/--replace flag अब --json के साथ सही तरह काम करता है
  • कुछ Jujutsu(jj) repositories को भी git repository की तरह पहचाना जाता है, इसलिए ripgrep अब jj के gitignore का पालन करता है
  • Globs अब nested braces को support करते हैं

platform support

  • Windows के लिए aarch64 release binaries अब उपलब्ध हैं
  • powerpc64 के लिए release binaries अब उपलब्ध नहीं कराए जाते
    • यह CI release workflow issues के कारण बंद किया गया है; testing और support चाहिए हो तो अनुरोध किया जा सकता है
  • ripgrep binaries को LTO (full link-time optimization) के साथ compile किया गया है, जिससे थोड़ी performance improvement और size reduction मिलती है

performance improvements

  • Windows पर, -z/--search-zip option इस्तेमाल न होने पर helper binary lookup disable करके performance बेहतर की गई है
  • Windows पर hyperlink output के दौरान path normalization skip करके speed बढ़ाई गई है
  • -A/--after-context इस्तेमाल करते समय बड़े values की processing performance बेहतर की गई है

bug fixes

  • parent directory gitignore लागू न होने समेत gitignore से जुड़े कई issues ठीक किए गए हैं
  • खाली file पर rg -vf file command को अब सब कुछ match करने के लिए बदला गया है
  • .gitignore आदि में UTF-8 BOM marker ignore करने की handling जोड़ी गई है
  • बड़े gitignore files को process करते समय memory usage optimization किया गया है
  • --stats इस्तेमाल करने पर searched bytes count output error ठीक किया गया है
  • . पर समाप्त होने वाले glob की handling error ठीक की गई है
  • -m/--max-count, -U/--multiline के combination में match count exceeded display की समस्या हल की गई है
  • -r/--replace flag इस्तेमाल करने पर अब line terminators preserve किए जाते हैं
  • -q --files-without-match combination में exit code inversion bug ठीक किया गया है
  • -c/--count और --files-with-matches के documentation mismatch को ठीक किया गया है
  • बड़े regular expressions और input पर दुर्लभ रूप से होने वाली panic समस्या ठीक की गई है
  • man page में option flag names के hyphen escape handling को ठीक किया गया है
  • macOS aarch64 release में PCRE2 को statically compile किया गया है
  • whitelisted hidden files search करते समय parent directory ignore filter bug ठीक किया गया है
  • --json flag इस्तेमाल करने पर गलत summary stats की समस्या ठीक की गई है
  • absolute paths और global gitignore search के दौरान gitignore handling error ठीक किया गया है
  • -U/--multiline और -r/--replace के combination में होने वाली panic समस्या ठीक की गई है

feature improvements

  • default file type sets को काफ़ी expand और improve किया गया है
  • -r/--replace को --json के साथ compatible बनाया गया है
  • fish shell completion को ripgrep config file reflect करने के लिए बेहतर बनाया गया है
  • --color में इस्तेमाल होने वाले style attributes में italic जोड़ा गया है
  • .jj directory को git repository की तरह treat किया जाता है
  • multithreading इस्तेमाल करते समय, CLI में दिए गए file order के अनुसार search schedule करने की सुविधा जोड़ी गई है
  • Windows के लिए aarch64 release artifact जोड़ा गया है
  • highlight color type जोड़ा गया है, जिससे matched line में non-matching text को style किया जा सकता है
  • globs और globset crate में nested alternates feature जोड़ा गया है
  • --hyperlink-format autocomplete को bash, fish, zsh में बेहतर किया गया है

1 टिप्पणियां

 
GN⁺ 2025-10-19
Hacker News राय
  • ripgrep पिछले कई सालों में मेरा बहुत समय बचाने वाला टूल रहा है, हर नए सिस्टम पर सेटअप करते समय मैं इसे सबसे पहले इंस्टॉल करता हूँ, खासकर पुराने codebase को खंगालते समय यह बिल्कुल अनिवार्य है, बस एक छोटी सी शिकायत है कि -F (literal की तरह ट्रीट करने वाला) option इस्तेमाल करते समय भी कुछ characters अब भी escape मांगने वाले special characters की तरह ट्रीट होते हैं, ठीक-ठीक कौन से characters थे यह याद नहीं, फिर भी ripgrep को लगातार अपडेट होते देखना हमेशा अच्छा लगता है

    • अगर आप कोई उदाहरण बता सकें कि किस character में दिक्कत आई थी, तो मैं विस्तार से समझा सकता हूँ, -F/--fixed-strings pattern में regex features को 100% बंद कर देता है और सब कुछ literal की तरह ट्रीट करता है, अगर escaping की जरूरत पड़ रही है तो संभव है कि वह shell की वजह से हो
  • rg ऐसा टूल है जो सच में जादू जैसा लगता है, जबकि असल में यह बेहतरीन engineering, लगातार सुधार, और उस शानदार hardware performance का नतीजा है जिसका हम सब रोज़ इस्तेमाल करते हैं, साथ ही यह ऐसा innovation भी है जिसने developers को code को ज़्यादा तेज़ी से explore और समझने का रास्ता दिया, बिना lsp जैसे standards अलग से बनाने की जरूरत के

    • मैं सच में जानना चाहता हूँ कि इस संदर्भ में smithing का मतलब क्या है
  • ripgrep codebase "पेय तैयार करके अपनी सबसे आरामदायक कुर्सी पर बैठकर high-quality software को पढ़ने" का बेहतरीन उदाहरण है, code के अलग-अलग कोनों में क्लिक करते हुए बार-बार वाह निकलती है

  • fd की तरह rg भी सच में इस्तेमाल करने में मज़ा देने वाला command-line tool है, मुझे ऐसे नए command-based tools बहुत पसंद हैं

    • मुझे हाल ही में पता चला कि ripgrep और fd के लेखक Astral में काम करते हैं, तभी Astral का software इतना अच्छा है
    • दोनों tools बिना किसी खास option के भी default में 99% वही करते हैं जो मैं चाहता हूँ, यह बहुत बड़ा time-saver है, उदाहरण के लिए सिर्फ rg <string> या fd <string> टाइप करना ही काफी होता है
  • व्यक्तिगत रूप से मैं एक "extension" flag जोड़ना चाहूँगा, जो -g की तरह काम करे लेकिन input arguments को extension की तरह ट्रीट करे (उदाहरण: rg -e c,h), क्योंकि ज़्यादातर बार glob pattern इस्तेमाल करने का उद्देश्य extension match करना ही होता है

    • क्या आपने -t/--type flag देखा है? आपके उदाहरण की तरह इसे -tc के रूप में इस्तेमाल किया जा सकता है, और अगर ripgrep में वह extension मौजूद नहीं है, तो आप अपना type भी define कर सकते हैं
  • ripgrep वह मुख्य वजह था जिससे मेरी रुचि rust में शुरू हुई, यह इतना polished लगा कि यह जानकर और जिज्ञासा हुई कि इसे rust में लिखा गया है, और कई साल बाद भी मैं आज रोज़ rg इस्तेमाल करता हूँ

    • nibbles वह मुख्य वजह था जिससे मेरी रुचि qbasic में शुरू हुई, यह इतना polished था कि इसे qbasic में लिखा गया जानकर दिलचस्पी हुई, और उसी वजह से मैं nibbles रोज़ इस्तेमाल करने लगा
  • हाल में मैंने --replace option खोजा और यह काफ़ी प्रभावशाली लगा, --type के साथ इसका इस्तेमाल करते हुए अफसोस हुआ कि मुझे पहले इन शानदार features के बारे में पता नहीं था, अब से मैं release notes ज़्यादा ध्यान से पढ़ने और नई features पर नज़र रखने का सोच रहा हूँ, jj के साथ integration में सुधार भी अच्छा लगा

  • शानदार टूल है और usability भी बहुत आसान है, शुरुआत में इसे Linux पर इस्तेमाल करना शुरू किया था, अब Windows पर भी इस्तेमाल करता हूँ, इस टूल की वजह से अब मैं wildcard की जगह सीधे regex से search करने लगा हूँ

    • यह basic grep से बेहतर है, और rg --files command भी उपयोगी है
  • इस हफ्ते मैंने एक bash function बनाई जो सिर्फ git द्वारा tracked files पर ripgrep चलाती है

      rgg() {
        readarray -d '' -t FILES < <(git ls-files -z)
        rg "${@}" "${FILES[@]}"
      }
    

    जिन directories में बहुत सारी binary files या dot files होती हैं, वहाँ इससे search काफ़ी तेज़ हो सकती है, dot files को search करने के लिए -uu option चाहिए, लेकिन यह option binary files को भी search करने लगता है, और जब files की संख्या सैकड़ों में हो तो git ls-files खुद धीमा पड़ जाता है

    • क्या आपके पास कोई ठोस उदाहरण है जहाँ ऐसा करने से speed बेहतर हुई हो? आम तौर पर ripgrep पहले से ही gitignore rules का सम्मान करता है, इसलिए उसका व्यवहार git ls-files जैसा ही होता है, और जानकारी के लिए -uu का मतलब है कि ripgrep gitignore और hidden files को अनदेखा करे, लेकिन तब भी यह binary files को skip करता है, binary files भी शामिल करने के लिए -uuu चाहिए, function की सबसे बड़ी समस्या यह है कि Linux kernel repo पर चलाने से argument list too long की error आती है, इसलिए मैंने इसे xargs से बदलकर देखा
        $ git ls-files -z | time xargs -0 rg APM_RESUME
        ...
      
        real  0.638
        user  0.741
        sys   1.441
        maxmem 29 MB
        faults 0
        $ time rg APM_RESUME
        ...
      
        real  0.097
        user  0.399
        sys   0.588
        maxmem 29 MB
        faults 0
      
      अगर किसी के पास ऐसा उदाहरण हो जहाँ git ls-files -z | xargs -0 rg ... साधारण rg ... से तेज़ हो, तो कृपया साझा करें
    • यह लिखने के बाद जब मैंने manual दोबारा पढ़ा, तो पता चला कि -uu की जगह -. flag इस्तेमाल किया जा सकता है, जो सिर्फ hidden files search करने के लिए है, git द्वारा tracked hidden files को search कर पाना अच्छा होगा, लेकिन file list query करने का overhead इतना है कि rust में लिखा होने पर भी उसे नज़रअंदाज़ नहीं किया जा सकता
    • शायद मैं कुछ मिस कर रहा हूँ, लेकिन क्या ripgrep default रूप से git में tracked न होने वाली files को ignore नहीं करता?
    • क्या यह तरीका git grep से तेज़ है?
  • मैं रोज़ अपने काम में ripgrep इस्तेमाल करता हूँ, command line पर भी और vscode में search करते समय भी, burntsushi को धन्यवाद