rurema / bitclust Goto Github PK
View Code? Open in Web Editor NEWSystem behind Japanese Ruby reference manual
Home Page: https://github.com/rurema/doctree/wiki
System behind Japanese Ruby reference manual
Home Page: https://github.com/rurema/doctree/wiki
メソッド(や特殊変数など)の検索機能を試作してみました。
https://scivola.github.io/rurema-search-demo/
HTML,CSS,JavaScript だけでできています。
String#each_codepoint
といった形のメソッド名(にクラスがついたもの)と URL との対照データを JSON 的に持たせています。1 MB 程度。
これは statichtml
サブコマンドで生成する,という前提です。
検索ページがほしい理由はこんなところです:
https://docs.ruby-lang.org/ja/latest/class/File.html が macOS の Firefox 71 だと以下のように ol そのままでスタイルシートが適用されていないような感じの表示がされています。
Chrome だと以下のように表示されています。
rurema/doctree#1579 の関連です。
#61 によってドキュメント本文内の不要な空白は削除されましたが、メタタグのdescriptionでは除かれないままのようです。
たとえば URI::Generic#hostname
のドキュメントのメタタグには不要な空白が含まれています。
$ curl https://docs.ruby-lang.org/ja/master/method/URI=3a=3aGeneric/i/hostname.html | grep -A 1 description
<meta name="description" content="自身の hostname を文字列で返します。また、[[m:URI::Generic#host]] が設
定されていない場合は nil を返します。">
--
<dd class="method-description">
<p>
これはSlackにURLをはった時、不自然な空白がみえて気が付きました。
そのため、メタタグのdescriptionでも同様にこの空白を取り除いた方が良さそうです。
#86 と同様クラスの継承リスト部分もnav / ol / liでマークアップしたい
現状だと以下のようにリストとしてマークアップされていない
<p>
クラスの継承リスト: Hash
< <a href="../class/Enumerable.html">Enumerable</a>
< <a href="../class/Object.html">Object</a>
< <a href="../class/Kernel.html">Kernel</a>
< <a href="../class/BasicObject.html">BasicObject</a>
Googleなどの検索エンジンの検索結果の画面にアイコンが表示されていなさそうです。
GoogleのSearch Consoleのヘルプページを見ると以下のように書かれています。
ファビコンのサイズが 48 ピクセルの倍数になっていること(例: 48 x 48 ピクセル、96 x 96 ピクセル、144 x 144 ピクセルなど)。SVG ファイルの場合は、サイズに関して特別な指定はありません。有効なファビコン形式は、すべてサポートされています。Google では画像サイズを 16 x 16 ピクセルに変換するため、その解像度で適切に表示されるか、あらかじめご確認ください。16 × 16 ピクセルのファビコンは指定しないでください。
https://support.google.com/webmasters/answer/9290858?hl=ja
るりまのfaviconは16x16サイズのように見えるのでそれが原因かもしれません。
https://github.com/rurema/bitclust/blob/master/theme/default/rurema.png
エラーになる環境では javascript のエラーは無視して元の href のままにするのが良さそうです。
IE11ではエラーになりそうですが静的なページなはずのでJavaSciptでエラーでて止まっても特に問題ないのかな...?
https://caniuse.com/#feat=urlsearchparams
最小再現条件は絞り込めていませんが,
#@samplecode
puts /<a>/
#@end
を
bitclust htmlfile 云々
で処理すると,
<pre class="highlight ruby">
<code>
<span class="nb">puts</span> <span class="sr">/<a>/</span>
</code></pre>
というコードが出来ます。
<a>
がエスケープされずにそのまま <a>
として入っています。
/<a>/
を "<a>"
に変えると,処理は正常でした。
rurema/doctree#2069 を修正中に発見しました。
MatchData の named_captures
には
m = /(?<a>.)(?<b>.)/.match("01")
m.named_captures #=> {"a" => "0", "b" => "1"}
m = /(?<a>.)(?<b>.)?/.match("0")
m.named_captures #=> {"a" => "0", "b" => nil}
m = /(?<a>.)(?<a>.)/.match("01")
m.named_captures #=> {"a" => "1"}
m = /(?<a>x)|(?<a>y)/.match("x")
m.named_captures #=> {"a" => "x"}
という個所があり,これを #@samplecode
形式に変えたところ,そこからあとのスタイルが崩れたので気づきました。
BitClustのWikiの情報が古いのか、
すぐ使えないものが多いように思います。
特にhtmlfileサブコマンドについて、使いやすくあって欲しいです。
bitclust htmlfile --target=Range Range > t.html
bitclust htmlfile ../doctree/refm/api/src/_builtin/Array --target Array > t.html
bitclust htmlfile ../doctree/refm/api/src/net/https.rd > a.html
bitclust htmlfile src/zlib/GzipReader #ライブラリGzipReader
bitclust htmlfile src/zlib/GzipReader --target=Zlib::GZipReader #クラスGzipReader
bitclust htmlfile --force mkmf.rd #ファイルの全体を強制的に出力する
bitclust htmlfile --ruby=1.8.6 --target=Array Array > t.html #rubyのバージョンを指定
bitclust htmlfile --capi ../doctree/refm/capi/src/array.c.rd --target=rb_ary_new3 # C API では現状 --target 必須
1番最初のRange
などクラス指定だけでいけそうな雰囲気ですが、
パスじゃないと上手くいかないように思います。
htmlfileコマンドそのものの問題ですけど、パスが存在しないときにRuby本体のエラー文が10行ほどでるので、わかりにくいです。
これは、別でIssueをたてるべきでしょうかね。
後半の--force
や--capi
について、
--force
オプションは存在するようですが動かないし、
--capi
は、invalid optionだと怒られます。
動かないもの等、Wikiから消したりしていきたいです。
clear-code/rurema-search#31 からの報告です。
@kou さんがおっしゃるにはシンタックスハイライト機能には以下の問題があるらしいです。
これ、BitClustのシンタックスハイライト機能が終端なしのRangeに対応していなくてエラーになるからなんですよ。
rurema/doctree@55e28e0#diff-3b8de3267235fda393d0c1ea268bf05aR45 で追加されたサンプルコードでエラーが発生します。
終端を持たない範囲オブジェクト:3:6 syntax error, unexpected ')' (BitClust::SyntaxHighlighter::ParseError)
後でBitClustを直そうと思って全然手を付けられていないのでBitClustの方に報告しておいてもらえますか?
rurema/doctree@6aa2d52 のコミットログに書いた
-:5:12 syntax error, unexpected keyword_ensure, expecting keyword_end (BitClust::SyntaxHighlighter::ParseError)
のようにファイル名が -
になっていて、実際の syntax error が起きた samplecode がどのファイルなのか、この行だけだとわかりませんでした。
(src の追加はとりあえず grep で探せるように追加したのですが、テストを確認できておらず失礼しました 🙇)
$ docker run --rm ruby:2.6.5-alpine sh -c 'set -x && gem install refe2 && refe'
+ gem install refe2
Successfully installed rack-2.0.7
Successfully installed progressbar-1.10.1
Successfully installed bitclust-core-1.2.2
Successfully installed refe2-1.2.2
4 gems installed
+ refe
/usr/local/bundle/gems/refe2-1.2.2/bin/refe:6:in `realpath': No such file or directory @ realpath_rec - /usr/local/bundle/gems/refe2-1.2.2/lib (Errno::ENOENT)
from /usr/local/bundle/gems/refe2-1.2.2/bin/refe:6:in `realpath'
from /usr/local/bundle/gems/refe2-1.2.2/bin/refe:6:in `<top (required)>'
from /usr/local/bundle/bin/refe:23:in `load'
from /usr/local/bundle/bin/refe:23:in `<main>'
gem に lib ディレクトリが含まれなくなったのが原因のようです。
https://github.com/rurema/bitclust の説明の URL が http://bugs.ruby-lang.org/projects/rurema/wiki のままになっているので、https://github.com/rurema/doctree/wiki かどこかの https://github.com/rurema 以下の URL に更新した方が良いのではないでしょうか。
実装している途中。
デフォルトで noindex にする。
rurema/doctree#2348 の CI が失敗している原因を調べてみたところ、 class/Complex.html
からは隠れていても、 method/Complex/i/=3c.html
のような個別ページが生成されていて、そちらが以下のように check_format
タスクで検出されて失敗になっていました。
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.5.0/method/Complex/i/=3c.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.5.0/method/Complex/i/=3c=3d.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.5.0/method/Complex/i/=3e.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.5.0/method/Complex/i/=3e=3d.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.5.0/method/Complex/i/between=3f.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.5.0/method/Complex/i/clamp.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.6.0/method/Complex/i/=3c.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.6.0/method/Complex/i/=3c=3d.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.6.0/method/Complex/i/=3e.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.6.0/method/Complex/i/=3e=3d.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.6.0/method/Complex/i/between=3f.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.6.0/method/Complex/i/clamp.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.7.0/method/Complex/i/=3c.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.7.0/method/Complex/i/=3c=3d.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.7.0/method/Complex/i/=3e.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.7.0/method/Complex/i/=3e=3d.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.7.0/method/Complex/i/between=3f.html
Found invalid meta info: <dt>[UNKNOWN_META_INFO] @undef:</dt> in /tmp/html/2.7.0/method/Complex/i/clamp.html
metaタグの中にbitclustの構文を含む情報があるとそのまま表示されてしまうようでした。
https://docs.ruby-lang.org/ja/latest/doc/spec=2fliteral.html など。
るりまのドキュメントのクラスのページにそのクラスで定義されているメソッドの一覧がありますが、メソッド間の空白が狭いせいかとても読みづらく感じます。
そのため、これをもう少し読みやすくしたいです。
試しにmarginを入れてみたところ、だいぶ読みやすくなった気がします。
margin-left: 10px
margin-left: 5px
10pxだと間隔が少し広すぎると感じるので、5pxのほうがちょうどよいと思っています。
5pxのmarginを足そうと思うのですが、どうでしょうか?
margin以外にもなにか良いアイディアがあればコメントください!
とはいえ、marginを入れるのは一瞬でできるし、とりあえず一次対応としてやってしまって良いかなと思っています。それ以上の改善はmarginを入れてから考えるので遅くないと思っています
#18 でリンクは追加されましたが、さらに改善できると良さそうです。
参考: https://jsprimer.net/intro/feedback/
テンプレートとして参照していたページの URL が入るようなサイトもあるようなので、そういうリンクにするのも良さそうです。
Enumerable#to_h (Ruby 3.0.0 リファレンスマニュアル)
%i[]
のシンタックスハイライトが、うまくいってなさそうでした。
ただ、%i[]
が使われているところが、1, 2箇所しかないので、直す必要性は低いとは思います。
備忘でIssue作成しました。
Rubyリファレンスマニュアルの略称として「rurema」「るりま」が定着していると思います。
しかしテンプレートの中に「るりま」や「rurema」の単語が含まれていなさそうです。
なので「Array るりま」などで検索したときリファレンスマニュアルがヒットしていなさそう。
テンプレート内のどこかにキーワードとして「るりま」「rurema」を加えると検索しやすくなると思いますがどうでしょうか?
rurema/doctree#2524 で samplecode
がテキストファイルに使われているのですが、他にも ruby 以外のサンプルファイルをコピーしやすい表示にしたいこともありそうなので、 ruby としての syntax highlight なしで同様の HTML になる sampleなんとか
があると良さそうだと思いました。
現在、るりまのメソッドページのタイトルには最初に「instance method」などの文字列が入っています。
メソッドがinstance methodなのかどうかというのはクラス名とメソッド名が#
で繋がれているのを見れば分かるので、あまり重要な情報ではありません。それなのに「instance method」が一番先頭に来ているのは、違和感があります。
そのため、タイトル情報から"instance method"という表記をなくす or 後ろに移すのを提案します。
実際のメソッドページに表示されている青帯の部分は変えても変えなくても良いかなと思っています。
これってSEOに効果あるんですかね、わからない🤔
Array
あたりに顕著ですが、Enumerable
をincludeして継承したメソッドを同名で再定義しています。
継承したメソッドの再定義は、効率化のためだけで機能が同じものも、そうでないものもありますが、
他のクラスのインスタンスでも同名のメソッドが使えることを示唆し、
視野を広げて俯瞰して体系的に捉えやすくなっていいのではないか、と考えています。
関連: https://qiita.com/scivola/questions/3b984e863fdbcb2bd6ec
以下のような事があるようでした。
トップページ
https://docs.ruby-lang.org/ja/2.7.0/doc/
には以下のような個所があります。
組み込みライブラリ
Builtin libraries
標準添付ライブラリ
All libraries
C API
All C API
この「Builtin libraries」「All libraries」「All C API」が英語なのはちょっと不親切な気がします。
リンク先のページタイトルである
生成したドキュメントに github のるりまプロジェクトへのリンクを付けたい。
scivola 22:35
https://rubygems.org/gems/refe2
の「ソースコード」がリンク切れになっていますね。
https://ruby-jp.slack.com/archives/CM3PCPNQ5/p1581946508272300
この辺書くとよさそう
https://guides.rubygems.org/specification-reference/#metadata
Mac + Chrome 環境でサンプルコードが等幅にならずに表示がずれます
例えば
https://docs.ruby-lang.org/ja/latest/method/String/s/new.html
Mac + Chrome でコメントが揃わない。
同じ内容を↓のように esa で確認するとズレてないし、Win + Chrome も問題ない。
text = "hoge".encode("EUC-JP")
no_option = String.new(text) # => "hoge"
no_option.encoding == Encoding::EUC_JP # => true
with_encoding = String.new(text, encoding: "UTF-8") # => "hoge"
with_encoding.encoding == Encoding::UTF_8 # => true
String.new("test", encoding: "UTF-8", capacity: 100_000) # => "test"
https://qiita.com/tmsanrinsha/items/d493a9889df7dee239bb
たぶんこれ?
( hkdnet さんと becolomochi )さんに調べてもらった。
HTML Help Workshop用ファイルのエンコーディングが utf-8 のため文字化けが発生します。
lib\bitclust\subcommands\chm_command.rb で Windows-31j を指定すれば良いのですが、
pull request を発行するのが良いでしょうか?
この記事で例にあげられている「ruby compact」をBingで検索したところ、自分の環境では1ページめにるりまが出てきませんでした。
https://qiita.com/jnchito/items/2dc760ee0716ea12bbf0
BingのWeb Master Guidelineを参考にSEOしたいです。
https://www.bing.com/webmaster/help/webmaster-guidelines-30fba23a
のようなナビゲーションのマークアップ方法の改善に加えて、sitemap.xml があると良さそうだなと思いました。
Originally posted by @r7kamura in #89 (comment)
Rubyのリファンレンスマニュアルの「NEWS for Ruby 2.7.0」のページに書かれたサンプルコードの Object.new
が .newObject
で表示されていました。
https://docs.ruby-lang.org/ja/latest/doc/news=2f2_7_0.html
元ファイルを確認しましたが Object.new
と書かれていました。
bitclustで該当のサンプルコードの生成の確認をしました。
その結果、特異メソッド内で Object.new
と書いた時に .newObject
となるようでした。
以下は、確認に使用したコードです。
require "bitclust"
parser = BitClust::SyntaxHighlighter.new(<<EOS
def foo
class << Object.new
yield #=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [[feature:15575]]
end
end
foo { p :ok }
EOS
)
puts parser.highlight
以下は実行結果です。
<span class="k">def</span> <span class="nf">foo</span>
<span class="k">class</span> <span class="o"><<</span> <span class="p">.</span><span class="nf">new</span><span class="nn"></span><span class="o"></span><span class="nc">Object</span>
<span class="k">yield</span> <span class="c1">#=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [[feature:15575]]
</span> <span class="k">end</span>
<span class="k">end</span>
foo <span class="p">{</span> <span class="nb">p</span> <span class="ss">:ok</span> <span class="p">}</span>
この状態は on_const
と on_nl
の時の処理が関係しているようでした。
bitclust/lib/bitclust/syntax_highlighter.rb
Lines 178 to 191 in b18d677
bitclust/lib/bitclust/syntax_highlighter.rb
Lines 262 to 271 in b18d677
on_const
で @name_buffer
にトークンの値を代入して on_nl
で処理しますが、特異メソッドの Object.new
はその処理が合わないようでした。
一旦、 on_const
の処理をコメントアウトすると順番が変わり、 Object.new
になりました。
def on_const(token, data)
on_default(:on_const, token, data)
# case
# when @stack.last == :class
# @name_buffer << token
# when @stack.last == :module
# @name_buffer << token
# else
# on_default(:on_const, token, data)
# end
data
end
以下は、上記のコメントアウト後に実行した結果です。
<span class="k">def</span> <span class="nf">foo</span>
<span class="k">class</span> <span class="o"><<</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="k">yield</span> <span class="c1">#=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [[feature:15575]]
</span> <span class="k">end</span>
<span class="k">end</span>
<span class="nn"></span><span class="o"></span><span class="nc">foo</span> <span class="p">{</span> <span class="nb">p</span> <span class="ss">:ok</span> <span class="p">}</span>
そのまま Object.new
と書いたのは問題ありませんでした。
特異メソッド内に書かれた Object.new
が .newObject
になるようでした。
require "bitclust"
parser = BitClust::SyntaxHighlighter.new(<<EOS
Object.new
class C
class << self
def foo
Object.new
end
end
end
EOS
)
puts parser.highlight
以下の実行結果になりました。
<span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="k">class</span> <span class="nn"></span><span class="o"></span><span class="nc">C</span>
<span class="k">class</span> <span class="o"><<</span> <span class="nc">self</span>
<span class="k">def</span> <span class="nf">foo</span>
<span class="p">.</span><span class="nf">new</span><span class="nn"></span><span class="o"></span><span class="nc">Object</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
ご確認よろしくお願いします。
rurema/doctree#1165 からの流れです
例えばEnglishライブラリでは、同じグローバル変数に対して複数のエイリアスが設定されているものがいくつかあります。(例: $FS
と$FIELD_SEPARATOR
)
この場合、ライブラリのページの "追加・再定義されるメソッド" の部分にはこのどちらか片方しか表示されません。
例: https://docs.ruby-lang.org/ja/latest/library/English.html には$FIELD_SEPARATOR
は表示されているが、$FS
は表示されていない
これはページ内をブラウザで検索した時などに不便です。また、インスタンスメソッドに関してはどちらも表示されているようなので、一貫した挙動でもないようです。
そのため、どちらか片方ではなく両方(このケースの場合は$FS
と$FIELD_SEPARATOR
)がここに表示されてほしいです。
Vector#* のサンプルコードの構文ハイライトが以下のようにおかしくなっています。
以下のミニマムな例からも,どうやら *
や !
といった記号のメソッド(演算子メソッド)をピリオドで呼び出す形式が正しくパースできず,あとの行に影響しているのではないか,と思われます。
新しい人が迷わずに Pull Request 作成するところまで辿りつけるといいなぁ。
doctree
の方で== Protected Instance Methods
を検索すると、10ファイルほどヒットします。
ここに書かれているProtectedインスタンスメソッドが、一般的なPublicインスタンスメソッドと混ざっています。
あまりprotectedは使われてなく数は少ないかもしれませんが、
(ピンポイントで見て)内部向けのメソッドが外部向けのものと混ざるべきではないのでIssueとしてあげておきます。
1例として、Benchmark::Tms
のmemberwise
を貼っておきます。
doctree/benchmark.rd at 7dcae13e · rurema/doctree
たとえばArray#count
のようなメソッドは、るりまのドキュメントではArrayのページには説明が存在せず、Enumerable#count
として存在している。
一方Array#sum
はArrayにもEnumerableにも両方存在している。
初心者としては(というか私のようなある程度Rubyに慣れた人間でも)これは混乱の元で、ドキュメントを探すのがちょっと大変。
なぜならばドキュメントを探すためにRubyのメソッドの実装を意識しなければならないため。
目次の部分に、継承元のメソッドを表示するようにしたい。
例: (これはWebコンソールで適当にいじったやつなので、実装はまだ何もないです)
「Enumerableで定義されているメソッド」の中のリンクはEnumerableのページへのリンクで、Arrayのページ内にメソッドの解説まで書く必要はないと思っています。
つまり、単にページ先頭にメソッド一覧へのリンクを作れば良いかなと言う提案です。
$ bitclust search foo --invalid-option
invalid option: --invalid-option
/home/sho-h/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/bitclust-core-0.8.0/lib/bitclust/runner.rb:128:in `rescue in _run': undefined method `help' for #<BitClust::Searcher:0xf8ad0b08> (NoMethodError)
原因は BitClust::Searcher#help がないからのようなので、SubCommand と同様に追加します。
修正後。
$ bitclust search foo --invalid-option
invalid option: --invalid-option
Usage: bitclust search <pattern>
Object クラスの !~
メソッドが目次では !
になっています。
http://docs.ruby-lang.org/ja/2.1.0/class/Object.html
明確に bitclust の問題とわかっているわけではないので�すが、bitclust htmlfile
を実行したときに、途中で ID と思われる値が Object/i.=21._builtin
になっていました (ただ、この ID がどのように設定されるかも追えていません)。
また、上記ページのページ内リンクの URL も http://docs.ruby-lang.org/ja/2.1.0/class/Object.html#I_--21
となっているので、処理過程のどこかで ~
が抜けてしまっているのかな、という気がします。
あんまりアクティブに活動できてなくて、gemのリリースが滞っていると思うのでgemのリリースをできる人を追加したい。
「やるぞ!」という気持ちの人は手を上げてください。
💭 9月10月あたりは比較的マシなのでなんかできるかも。
http://cache.ruby-lang.org/pub/ruby/doc/ から ruby-refm-1.9.3-dynamic-20120829.tar.xz をダウンロードして ruby server.rb
を実行して http://localhost:10080/
を開いても真っ白なページで内容が表示されません。
原因を調べてみたところ、 f42aba0 の変更で db
の代わりに @database_prefix
になったのに初期値が設定されていないのが原因のようです。
とりあえず
mkdir -p ~/.bitclust
echo ':database_prefix: db' > ~/.bitclust/config
のように ~/.bitclust/config
で設定すれば表示されるようになりました。
数箇所で [ \t\z]
という文字クラスが使われています。
しかし,[ ]
の中で \z
と書いても,文字列終端のアンカーとは解釈されませんし,単に z
と書いたのと同じです。
つまり,[ \t\z]
は [ \tz]
と同じです。
z
をわざわざ \z
と書くとは考えられないので,意図と違っているのではないかと思います。
gem としては
gem list test
*** LOCAL GEMS ***
minitest (5.8.3)
rubytest (0.8.1)
test (1.0.0)
test-unit (3.2.1, 3.1.5)
が入っていますが、次のように失敗します。
rake test
ruby test/run_test.rb
C:/Programs/Ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:inrequire': cannot load such file -- test/unit/notify (LoadError) from C:/Programs/Ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in
require'
from test/run_test.rb:6:in<main>' rake aborted! Command failed with status (1): [ruby test/run_test.rb...] C:/Git/bitclust/Rakefile:15:in
block in <top (required)>'
Tasks: TOP => test
(See full trace by running task with --trace)
テストスイーツが異なるためではないかと思うのですが、どの gem を入れれば良いでしょうか。
環境
ruby 2.3.0p0 (2015-12-25 revision 53290) [i386-mingw32]
Windows 10 Pro 64bit
https://docs.ruby-lang.org/ja/latest/method/Exception/i/full_message.html
のように実行結果が長いと横スクロールが発生してしまいます。
ブログなどでよくあるようにコード部分だけ横スクロールするようにして、ページ全体は横スクロールバーが発生しないようにするのはどうでしょうか?
rurema/doctree#974 の変更をしていて気づいたのですが、
#@samplecode 例
require 'pp'
b = [1, 2, 3] * 4
a = [b, b]
a << a
pp a
#=> [[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
[...]]
#@end
で [...]]
の行が HTML に出力されないようです。
以下を参照。
generateした後のDBをfind-minimumなどで検索すると /tmp/db-1.9.3/method/-array/i.rotate=21._builtin に以下が見つかった。
... (元のArray#rotate!の内容) ...
//emlist[例: find-minimum モード][ruby]{
ary = [0, 4, 7, 10, 12]
ary.bsearch_index { |x| x >= 4 } # => 1
ary.bsearch_index { |x| x >= 6 } # => 2
ary.bsearch_index { |x| x >= -1 } # => 0
ary.bsearch_index { |x| x >= 100 } # => nil
//emlist[例: find-any モード][ruby]{
ary = [0, 4, 7, 10, 12]
# 4 <= v < 8 になる要素の位置を検索
ary.bsearch_index { |x| 1 - x / 4 } # => 2
# 8 <= v < 10 になる要素の位置を検索
ary.bsearch_index { |x| 4 - x / 2 } # => nil
2.2.0以降でも起こりうるかもしれないため、最低でも原因の確認までは必要そうに思いました。
定義されていないメソッドが、定義されているメソッドの中に混ざっている例を見ます。
混ざっているのは正しくなく、正確な理解をしたい人の理解を妨げると思うため、
未定義のメソッドを混ざらないように「説明のための未定義のメソッド」などの区分で独立させたいです。
例えば、Object
のインスタンスメソッドが顕著です。
Object#to_a (Ruby 3.0.0 リファレンスマニュアル)
説明のためここに記載してありますが、このメソッドは実際には Object クラスには定義されていません。必要に応じてサブクラスで定義すべきものです。
Array#clone (Ruby 3.0.0 リファレンスマニュアル)
また、Array
のdup
とclone
は継承されているだけなのに、説明の項目があります。
定義されているかどうかという線引だと削除すべきように思われますが、
自分自身配列でdupメソッドをよく使うし、Arrayは浅いコピーの問題が起きる代表例として載せる価値があるのかもしれないと思っています。
hash メソッドが載っていないクラスがある · Issue #2556 · rurema/doctree
他に、こちらのIssueで、Integer
などに未定義のhash
メソッドがないという話題がありました。
未定義ですが何か説明すべき事情があるなら、定義されているメソッドと混ざらないようにすればいいのでは、と思いました。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.