From 1a515b7620cecb102ccf8e82c6ee1d5d764507c5 Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Fri, 13 Nov 2020 16:48:39 +0900 Subject: [PATCH 01/18] feat: support auto completion in ruby tab --- src/containers/ruby-tab.jsx | 11 +++++++- src/containers/ruby-tab/motion-completer.js | 28 +++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/containers/ruby-tab/motion-completer.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index 70fee0938db..94da253d55a 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -19,6 +19,8 @@ import 'ace-builds/src-noconflict/theme-clouds'; import 'ace-builds/src-noconflict/ext-searchbox'; import 'ace-builds/src-noconflict/ext-language_tools'; +import MotionCompleter from './ruby-tab/motion-completer'; + class RubyTab extends React.Component { constructor (props) { super(props); @@ -87,6 +89,11 @@ class RubyTab extends React.Component { errors, markers } = rubyCode; + + const completers = [ + new MotionCompleter() + ]; + return ( Date: Wed, 2 Dec 2020 23:46:22 +0900 Subject: [PATCH 02/18] feat: motion auto completion --- src/containers/ruby-tab/motion-completer.js | 92 +++++++++++++++++---- 1 file changed, 76 insertions(+), 16 deletions(-) diff --git a/src/containers/ruby-tab/motion-completer.js b/src/containers/ruby-tab/motion-completer.js index 369cb835d10..f921b517dbb 100644 --- a/src/containers/ruby-tab/motion-completer.js +++ b/src/containers/ruby-tab/motion-completer.js @@ -3,24 +3,84 @@ */ class MotionCompleter { getCompletions (editor, session, pos, prefix, callback) { - console.log("pos: ", pos); const words = [ - "move(10)", - "turn_right(15)", - "turn_left(15)", - 'go_to("_random_")', - "go_to([0, 0])", - 'glide("_random_", secs: 1)', - "glide([0, 0], secs: 1)", - "self.direction = 90", + { + value: 'move(10)', + meta: '10歩動かす' + }, + { + value: 'turn_right(15)', + meta: '時計回りに15度回す' + }, + { + value: 'turn_left(15)', + meta: '反時計回りに15度回す' + }, + { + value: 'go_to("_random_")', + meta: 'どこかの場所へ行く' + }, + { + value: 'go_to([0, 0])', + meta: 'x座標を0、y座標を0にする' + }, + { + value: 'glide("_random_", secs: 1)', + meta: '1秒でどこかの場所へ行く' + }, + { + value: 'glide([0, 0], secs: 1)', + meta: '1秒でx座標を0に、y座標を0にする' + }, + { + value: 'self.direction = 90', + meta: '90度に向ける' + }, + { + value: 'point_towards("_mouse_")', + meta: 'マウスのポインターへ向ける' + }, + { + value: 'self.x += 10', + meta: 'x座標を10ずつ変える' + }, + { + value: 'self.x = 0', + meta: 'x座標を0にする' + }, + { + value: 'self.y += 10', + meta: 'y座標を10ずつ変える' + }, + { + value: 'self.y = 0', + meta: 'y座標を9にする' + }, + { + value: 'bounce_if_on_edge', + meta: 'もし端についたら、跳ね返る' + }, + { + value: 'self.rotation_style = "left-right"', + meta: '回転方法を左右のみにする' + }, + { + value: 'x', + meta: 'x座標' + }, + { + value: 'y', + meta: 'y座標' + }, + { + value: 'direction', + meta: '向き' + } ]; - let completions = []; - words.forEach(function(w) { - completions.push({ - value: w, - meta: "my completion" - }); - }); + const completions = []; + words.forEach( + w => completions.push(w) + ); callback(null, completions); } } From d38ce72cb733b987d9b96ab6179285b3b625ed00 Mon Sep 17 00:00:00 2001 From: stonesaw Date: Sun, 6 Dec 2020 00:02:54 +0900 Subject: [PATCH 03/18] feat: events auto completion --- src/containers/ruby-tab.jsx | 4 +- src/containers/ruby-tab/events-completer.js | 48 +++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/containers/ruby-tab/events-completer.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index 94da253d55a..60e86937faf 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -20,6 +20,7 @@ import 'ace-builds/src-noconflict/ext-searchbox'; import 'ace-builds/src-noconflict/ext-language_tools'; import MotionCompleter from './ruby-tab/motion-completer'; +import EventsCompleter from './ruby-tab/events-completer'; class RubyTab extends React.Component { constructor (props) { @@ -91,7 +92,8 @@ class RubyTab extends React.Component { } = rubyCode; const completers = [ - new MotionCompleter() + new MotionCompleter(), + new EventsCompleter() ]; return ( diff --git a/src/containers/ruby-tab/events-completer.js b/src/containers/ruby-tab/events-completer.js new file mode 100644 index 00000000000..2592d6e0a5c --- /dev/null +++ b/src/containers/ruby-tab/events-completer.js @@ -0,0 +1,48 @@ +/** + * Define Ruby code completer for Motion Blocks + */ +class EventsCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + value: 'self.when(:flag_clicked) do\nend', + meta: '旗が押されたとき' + }, + { + value: 'self.when(:key_pressed, "space") do\nend', + meta: 'スペースキーが押されたとき' + }, + { + value: 'self.when(:clicked) do\nend', + meta: 'このスプライトがクリックされたとき' + }, + { + value: 'self.when(:backdrop_switches, "背景1") do\nend', + meta: '背景が背景1になったとき' + }, + { + value: 'self.when(:greater_than, "loudness", 10) do\nend', + meta: '音量が10より小さいとき' + }, + { + value: 'self.when(:receive, "メッセージ1") do\nend', + meta: 'メッセージ1を受け取ったとき' + }, + { + value: 'broadcast("メッセージ1")', + meta: 'メッセージ1を送る' + }, + { + value: 'broadcast_and_wait("メッセージ1")', + meta: 'メッセージ1を送って待つ' + } + ]; + const completions = []; + words.forEach( + w => completions.push(w) + ); + callback(null, completions); + } +} + +export default EventsCompleter; From 07162d1f9535fd7425ea08aed2c31c4e086b9005 Mon Sep 17 00:00:00 2001 From: riversunlight Date: Fri, 11 Dec 2020 16:16:22 +0900 Subject: [PATCH 04/18] feat: sensing auto completion --- src/containers/ruby-tab.jsx | 5 +- src/containers/ruby-tab/sensing-completer.js | 92 ++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/containers/ruby-tab/sensing-completer.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index 60e86937faf..dca4a693afe 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -21,6 +21,8 @@ import 'ace-builds/src-noconflict/ext-language_tools'; import MotionCompleter from './ruby-tab/motion-completer'; import EventsCompleter from './ruby-tab/events-completer'; +import SensingCompleter from './ruby-tab/sensing-completer'; + class RubyTab extends React.Component { constructor (props) { @@ -93,7 +95,8 @@ class RubyTab extends React.Component { const completers = [ new MotionCompleter(), - new EventsCompleter() + new EventsCompleter(), + new SensingCompleter() ]; return ( diff --git a/src/containers/ruby-tab/sensing-completer.js b/src/containers/ruby-tab/sensing-completer.js new file mode 100644 index 00000000000..488d2fd7d86 --- /dev/null +++ b/src/containers/ruby-tab/sensing-completer.js @@ -0,0 +1,92 @@ +/** + * Define Ruby code completer for Sensing Blocks + */ +class SensingCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + value: 'touching?("_mouse_")', + meta: 'マウスのポインターに触れた' + }, + { + value: 'touching_color?("#571332")', + meta: '#571332の色に触れた' + }, + { + value: 'color_is_touching_color?("#ce2ef7", "#6a7a0e")', + meta: '#ce2ef7が#6a7a0eの色に触れた' + }, + { + value: 'distance("_mouse_")', + meta: 'マウスのポインターまでの距離' + }, + { + value: 'ask("あなたの名前は何ですか?")', + meta: 'あなたの名前は何ですかと聞いて待つ' + }, + { + value: 'answer', + meta: '答え' + }, + { + value: 'Keyboard.pressed?("space")', + meta: 'スペースキーが押された' + }, + { + value: 'Mouse.down?', + meta: 'マウスが押された' + }, + { + value: 'Mouse.x', + meta: 'マウスのx座標' + }, + { + value: 'Mouse.y', + meta: 'マウスのy座標' + }, + { + value: 'self.drag_mode = "draggable"', + meta: 'ドラッグできるようにする' + }, + { + value: 'loudness', + meta: '音量' + }, + { + value: 'Timer.value', + meta: 'タイマー' + }, + { + value: 'Timer.reset', + meta: 'タイマーをリセット' + }, + { + value: 'stage.backdrop_number', + meta: 'ステージの背景#' + }, + { + value: 'stage.backdrop_number', + meta: 'ステージの背景#' + }, + { + value: 'Time.now.year', + meta: '現在の年' + }, + { + value: 'days_since_2000', + meta: '2000年からの日数' + }, + { + value: 'user_name', + meta: 'ユーザー名' + } + ]; + const completions = []; + words.forEach( + w => completions.push(w) + ); + callback(null, completions); + } +} + +export default SensingCompleter; From 25e58d1cf6785fdcc7888a81ba5dc1a838995b56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E5=B3=B6=E9=99=BD=E6=96=97?= Date: Fri, 4 Dec 2020 18:04:56 +0900 Subject: [PATCH 05/18] feat: sound auto completion --- src/containers/ruby-tab.jsx | 3 +- src/containers/ruby-tab/sound-completer.js | 52 ++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/containers/ruby-tab/sound-completer.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index dca4a693afe..deb0287ad04 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -22,7 +22,7 @@ import 'ace-builds/src-noconflict/ext-language_tools'; import MotionCompleter from './ruby-tab/motion-completer'; import EventsCompleter from './ruby-tab/events-completer'; import SensingCompleter from './ruby-tab/sensing-completer'; - +import SoundCompleter from './ruby-tab/sound-completer'; class RubyTab extends React.Component { constructor (props) { @@ -97,6 +97,7 @@ class RubyTab extends React.Component { new MotionCompleter(), new EventsCompleter(), new SensingCompleter() + new SoundCompleter(), ]; return ( diff --git a/src/containers/ruby-tab/sound-completer.js b/src/containers/ruby-tab/sound-completer.js new file mode 100644 index 00000000000..e1f0ca22dfa --- /dev/null +++ b/src/containers/ruby-tab/sound-completer.js @@ -0,0 +1,52 @@ +/** + * Define Ruby code completer for Motion Blocks + */ +class SoundCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + value: 'play_until_done("ニャー")', + meta: '終わるまでニャーの音を鳴らす' + }, + { + value: 'play("ニャー")', + meta: 'ニャーの音を鳴らす' + }, + { + value: 'stop_all_sounds', + meta: 'すべての音を止める' + }, + { + value: 'change_sound_effect_by("PITCH",10)', + meta: 'ピッチの効果を10ずつ変える' + }, + { + value: 'set_sound_effect("PITCH", 100)', + meta: 'ピッチの効果を100にする' + }, + { + value: 'clear_sound_effects', + meta: '音の効果をなくす' + }, + { + value: 'self.volume += -10', + meta: '音量を-10ずつ変える' + }, + { + value: 'self.volume =100', + meta: '音量を100%にする' + }, + { + value: 'volume', + meta: '音量' + } + ]; + const completions = []; + words.forEach( + w => completions.push(w) + ); + callback(null, completions); + } +} + +export default SoundCompleter; From eceb448af739b386dc04b664053e9ecff506b656 Mon Sep 17 00:00:00 2001 From: riversunlight Date: Fri, 18 Dec 2020 18:06:22 +0900 Subject: [PATCH 06/18] feat: gdx_for auto completion --- src/containers/ruby-tab.jsx | 3 ++ src/containers/ruby-tab/gdx-for-completer.js | 52 ++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/containers/ruby-tab/gdx-for-completer.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index deb0287ad04..7452a9341c0 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -23,6 +23,7 @@ import MotionCompleter from './ruby-tab/motion-completer'; import EventsCompleter from './ruby-tab/events-completer'; import SensingCompleter from './ruby-tab/sensing-completer'; import SoundCompleter from './ruby-tab/sound-completer'; +import GdxForCompleter from './ruby-tab/gdx-for-completer'; class RubyTab extends React.Component { constructor (props) { @@ -98,6 +99,8 @@ class RubyTab extends React.Component { new EventsCompleter(), new SensingCompleter() new SoundCompleter(), + new SensingCompleter(), + new GdxForCompleter() ]; return ( diff --git a/src/containers/ruby-tab/gdx-for-completer.js b/src/containers/ruby-tab/gdx-for-completer.js new file mode 100644 index 00000000000..1e6adbda174 --- /dev/null +++ b/src/containers/ruby-tab/gdx-for-completer.js @@ -0,0 +1,52 @@ +/** + * Define Ruby code completer for Go Direct Force & Acceleration Blocks + */ +class GdxForCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + value: 'self.when(:gdx_for_gesture, "shaken") do\nend', + meta: '振られたとき' + }, + { + value: 'self.when(:gdx_force_sensor, "pushed") do\nend', + meta: 'force sensor押されたとき' + }, + { + value: 'gdx_for_force', + meta: 'force' + }, + { + value: 'self.when(:gdx_for_tilted, "any") do\nend', + meta: 'どれかの向きに傾いたとき' + }, + { + value: 'gdx_for_tilted?("any")', + meta: 'どれかの向きに傾いた' + }, + { + value: 'gdx_for_tilt_angle("front")', + meta: '前方向の傾き' + }, + { + value: 'gdx_for_falling?', + meta: '落下中' + }, + { + value: 'gdx_for_spin_speed("z")', + meta: 'z回転の速さ' + }, + { + value: 'gdx_for_acceleration("x")', + meta: 'x方向への加速度' + } + ]; + const completions = []; + words.forEach( + w => completions.push(w) + ); + callback(null, completions); + } +} + +export default GdxForCompleter; From 861eaa01f04fecafa5be11f0a8c575c56c66a8bc Mon Sep 17 00:00:00 2001 From: riversunlight Date: Fri, 15 Jan 2021 16:03:27 +0900 Subject: [PATCH 07/18] feat: microbit auto completion --- src/containers/ruby-tab.jsx | 4 ++- src/containers/ruby-tab/microbit.js | 52 +++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/containers/ruby-tab/microbit.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index 7452a9341c0..4b65444aa21 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -24,6 +24,7 @@ import EventsCompleter from './ruby-tab/events-completer'; import SensingCompleter from './ruby-tab/sensing-completer'; import SoundCompleter from './ruby-tab/sound-completer'; import GdxForCompleter from './ruby-tab/gdx-for-completer'; +import MicrobitCompleter from './ruby-tab/microbit'; class RubyTab extends React.Component { constructor (props) { @@ -100,7 +101,8 @@ class RubyTab extends React.Component { new SensingCompleter() new SoundCompleter(), new SensingCompleter(), - new GdxForCompleter() + new GdxForCompleter(), + new MicrobitCompleter() ]; return ( diff --git a/src/containers/ruby-tab/microbit.js b/src/containers/ruby-tab/microbit.js new file mode 100644 index 00000000000..746a1a4f6da --- /dev/null +++ b/src/containers/ruby-tab/microbit.js @@ -0,0 +1,52 @@ +/** + * Define Ruby code completer for micro:bit Blocks + */ +class MicrobitCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + value: 'self.when(:microbit_button_pressed, "A") do\nend', + meta: 'ボタンAが押されたとき' + }, + { + value: 'microbit.button_pressed?("A")', + meta: 'ボタンAが押された' + }, + { + value: 'self.when(:microbit_gesture, "moved") do\nend', + meta: '動いたとき' + }, + { + value: 'microbit.display_text("Hello!")', + meta: 'Hello!を表示する' + }, + { + value: 'microbit.display(\n".1.1.",\n"1.1.1",\n"1...1",\n".1.1.",\n"..1.."\n)', + meta: 'ハートマークを表示する' + }, + { + value: 'self.when(:microbit_tilted, "any") do\nend', + meta: 'どれかの向きに傾いたとき' + }, + { + value: 'microbit.tilted?("any")', + meta: 'どれかの向きに傾いた' + }, + { + value: 'microbit.tilt_angle("front")', + meta: '前方向の傾き' + }, + { + value: 'self.when(:microbit_pin_connected, 0) do\nend', + meta: 'ピン0がつながったとき' + } + ]; + const completions = []; + words.forEach( + w => completions.push(w) + ); + callback(null, completions); + } +} + +export default MicrobitCompleter; From b544191838804df641ce0623d961ab6a528a36d5 Mon Sep 17 00:00:00 2001 From: Laminne Tatsuto Yamamoto Date: Fri, 11 Dec 2020 17:16:44 +0900 Subject: [PATCH 08/18] feat: control auto completion --- src/containers/ruby-tab.jsx | 2 + src/containers/ruby-tab/control-completer.js | 58 ++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/containers/ruby-tab/control-completer.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index 4b65444aa21..cc8ba0c4ae6 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -25,6 +25,7 @@ import SensingCompleter from './ruby-tab/sensing-completer'; import SoundCompleter from './ruby-tab/sound-completer'; import GdxForCompleter from './ruby-tab/gdx-for-completer'; import MicrobitCompleter from './ruby-tab/microbit'; +import ControlCompleter from './ruby-tab/control-completer'; class RubyTab extends React.Component { constructor (props) { @@ -103,6 +104,7 @@ class RubyTab extends React.Component { new SensingCompleter(), new GdxForCompleter(), new MicrobitCompleter() + new ControlCompleter() ]; return ( diff --git a/src/containers/ruby-tab/control-completer.js b/src/containers/ruby-tab/control-completer.js new file mode 100644 index 00000000000..251c63b3767 --- /dev/null +++ b/src/containers/ruby-tab/control-completer.js @@ -0,0 +1,58 @@ +/** + * Define Ruby code completer for Control Blocks + */ +class ControlCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + value: 'sleep(1)', + meta: '一秒待つ' + }, + { + value: '10.times do\nend', + meta: '10回繰り返す' + }, + { + value: 'loop do\nend', + meta: 'ずっと繰り返す' + }, + { + value: 'if false\nend', + meta: 'もし~なら' + }, + { + value: 'if false\nelse\nend', + meta: 'もし~なら でなければ' + }, + { + value: 'self.when(:start_as_a_clone) do\nend', + meta: 'クローンされたとき' + }, + { + value: 'create_clone("_myself_")', + meta: '自分自身のクローンを作る' + }, + { + value: 'delete_this_clone', + meta: 'このクローンを削除する' + }, + { + value: 'stop("all")', + meta: 'すべてを止める' + }, + { + value: 'stop("this script")', + meta: 'このスクリプトを止める' + }, + { + value: 'stop("other scripts in sprite")', + meta: 'スプライトの他のスクリプトをを止める' + } + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default ControlCompleter; From bf426a3ff810465ea30206d6b8ff77e7f26647f5 Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Fri, 13 Oct 2023 16:37:17 +0900 Subject: [PATCH 09/18] chore: bump up version 2.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 51d7eed97df..5af61de770f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "smalruby3-gui", - "version": "2.0.0", + "version": "2.0.1", "description": "GraphicaL User Interface for creating and running Smalruby 3.0 projects", "author": "Ruby Programming Shounendan", "license": "BSD-3-Clause", From 983b394c86c63b39f60466faabb3cffb7db55338 Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sat, 14 Oct 2023 07:52:02 +0900 Subject: [PATCH 10/18] feat: auto completion --- src/containers/ruby-tab.jsx | 40 ++++++++--- src/containers/ruby-tab/base-completer.js | 16 +++++ src/containers/ruby-tab/control-completer.js | 68 ++++++++++++------- src/containers/ruby-tab/events-completer.js | 47 +++++++------ src/containers/ruby-tab/gdx-for-completer.js | 52 -------------- src/containers/ruby-tab/looks-completer.js | 33 +++++++++ src/containers/ruby-tab/mesh-completer.js | 18 +++++ src/containers/ruby-tab/microbit-completer.js | 58 ++++++++++++++++ .../ruby-tab/microbit-more-completer.js | 13 ++++ src/containers/ruby-tab/microbit.js | 52 -------------- src/containers/ruby-tab/motion-completer.js | 61 ++++++++++------- src/containers/ruby-tab/music-completer.js | 13 ++++ .../ruby-tab/operators-completer.js | 13 ++++ src/containers/ruby-tab/pen-completer.js | 13 ++++ src/containers/ruby-tab/sensing-completer.js | 54 ++++++++------- .../ruby-tab/smalrubot-s1-completer.js | 13 ++++ src/containers/ruby-tab/sound-completer.js | 29 ++++---- .../ruby-tab/text-to-speech-completer.js | 13 ++++ .../ruby-tab/translate-completer.js | 13 ++++ .../ruby-tab/variables-completer.js | 13 ++++ .../ruby-tab/video-sensing-completer.js | 13 ++++ src/lib/ruby-generator/mesh.js | 2 +- src/lib/ruby-to-blocks-converter/index.js | 4 +- src/lib/ruby-to-blocks-converter/mesh.js | 36 +++++----- .../ruby-tab/extension_mesh.test.js | 2 +- 25 files changed, 441 insertions(+), 248 deletions(-) create mode 100644 src/containers/ruby-tab/base-completer.js delete mode 100644 src/containers/ruby-tab/gdx-for-completer.js create mode 100644 src/containers/ruby-tab/looks-completer.js create mode 100644 src/containers/ruby-tab/mesh-completer.js create mode 100644 src/containers/ruby-tab/microbit-completer.js create mode 100644 src/containers/ruby-tab/microbit-more-completer.js delete mode 100644 src/containers/ruby-tab/microbit.js create mode 100644 src/containers/ruby-tab/music-completer.js create mode 100644 src/containers/ruby-tab/operators-completer.js create mode 100644 src/containers/ruby-tab/pen-completer.js create mode 100644 src/containers/ruby-tab/smalrubot-s1-completer.js create mode 100644 src/containers/ruby-tab/text-to-speech-completer.js create mode 100644 src/containers/ruby-tab/translate-completer.js create mode 100644 src/containers/ruby-tab/variables-completer.js create mode 100644 src/containers/ruby-tab/video-sensing-completer.js diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index cc8ba0c4ae6..6671727e963 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -20,12 +20,23 @@ import 'ace-builds/src-noconflict/ext-searchbox'; import 'ace-builds/src-noconflict/ext-language_tools'; import MotionCompleter from './ruby-tab/motion-completer'; -import EventsCompleter from './ruby-tab/events-completer'; -import SensingCompleter from './ruby-tab/sensing-completer'; +import LooksCompleter from './ruby-tab/looks-completer'; import SoundCompleter from './ruby-tab/sound-completer'; -import GdxForCompleter from './ruby-tab/gdx-for-completer'; -import MicrobitCompleter from './ruby-tab/microbit'; +import EventsCompleter from './ruby-tab/events-completer'; import ControlCompleter from './ruby-tab/control-completer'; +import SensingCompleter from './ruby-tab/sensing-completer'; +import OperatorsCompleter from './ruby-tab/operators-completer'; +import VariablesCompleter from './ruby-tab/variables-completer'; + +import MusicCompleter from './ruby-tab/music-completer'; +import PenCompleter from './ruby-tab/pen-completer'; +import VideoSensingCompleter from './ruby-tab/video-sensing-completer'; +import TextToSpeechCompleter from './ruby-tab/text-to-speech-completer'; +import TranslateCompleter from './ruby-tab/translate-completer'; +import MicrobitCompleter from './ruby-tab/microbit-completer'; +import MeshCompleter from './ruby-tab/mesh-completer'; +import SmalrubotS1Completer from './ruby-tab/smalrubot-s1-completer'; +import MicrobitMoreCompleter from './ruby-tab/microbit-more-completer'; class RubyTab extends React.Component { constructor (props) { @@ -98,13 +109,23 @@ class RubyTab extends React.Component { const completers = [ new MotionCompleter(), - new EventsCompleter(), - new SensingCompleter() + new LooksCompleter(), new SoundCompleter(), + new EventsCompleter(), + new ControlCompleter(), new SensingCompleter(), - new GdxForCompleter(), - new MicrobitCompleter() - new ControlCompleter() + new OperatorsCompleter(), + new VariablesCompleter(), + + new MusicCompleter(), + new PenCompleter(), + new VideoSensingCompleter(), + new TextToSpeechCompleter(), + new TranslateCompleter(), + new MicrobitCompleter(), + new MeshCompleter(), + new SmalrubotS1Completer(), + new MicrobitMoreCompleter() ]; return ( @@ -121,6 +142,7 @@ class RubyTab extends React.Component { tabSize: 2, useSoftTabs: true, showInvisibles: true, + enableAutoIndent: true, enableBasicAutocompletion: completers, enableLiveAutocompletion: true }} diff --git a/src/containers/ruby-tab/base-completer.js b/src/containers/ruby-tab/base-completer.js new file mode 100644 index 00000000000..640b56a78c8 --- /dev/null +++ b/src/containers/ruby-tab/base-completer.js @@ -0,0 +1,16 @@ +class BaseCompleter { + getCompletions () { + throw new Error('Not implemented'); + } + + getDocTooltip (item) { + if (!item.docHTML) { + item.docHTML = [ + '', item.description || item.value, '', '
', + '', item.value, '' + ].join(''); + } + } +} + +export default BaseCompleter; diff --git a/src/containers/ruby-tab/control-completer.js b/src/containers/ruby-tab/control-completer.js index 251c63b3767..ba0da6fbee2 100644 --- a/src/containers/ruby-tab/control-completer.js +++ b/src/containers/ruby-tab/control-completer.js @@ -1,52 +1,72 @@ -/** - * Define Ruby code completer for Control Blocks - */ -class ControlCompleter { +import BaseCompleter from './base-completer'; + +class ControlCompleter extends BaseCompleter { getCompletions (editor, session, pos, prefix, callback) { const words = [ { + caption: 'sleep', value: 'sleep(1)', - meta: '一秒待つ' + description: '(1) 秒待つ' }, { - value: '10.times do\nend', - meta: '10回繰り返す' + caption: 'times', + value: '10.times do\n\nend\n', + description: '(10) 回繰り返す' }, { - value: 'loop do\nend', - meta: 'ずっと繰り返す' + caption: 'loop', + value: 'loop do\n\nend\n', + description: 'ずっと' }, { - value: 'if false\nend', - meta: 'もし~なら' + caption: 'if', + value: 'if false\n\nend\n', + description: 'もし < > なら' }, { - value: 'if false\nelse\nend', - meta: 'もし~なら でなければ' + caption: 'if-else', + value: 'if false\n\nelse\n\nend\n', + description: 'もし < > なら、でなければ' }, { - value: 'self.when(:start_as_a_clone) do\nend', - meta: 'クローンされたとき' + caption: 'wait-until', + value: 'wait until false', + description: '< > まで待つ' }, { - value: 'create_clone("_myself_")', - meta: '自分自身のクローンを作る' - }, - { - value: 'delete_this_clone', - meta: 'このクローンを削除する' + caption: 'until', + value: 'until false\n\nend\n', + description: '< > まで繰り返す' }, { + caption: 'stop-all', value: 'stop("all")', - meta: 'すべてを止める' + description: '[すべてを止める▼]' }, { + caption: 'stop-this', value: 'stop("this script")', - meta: 'このスクリプトを止める' + description: '[このスクリプトを止める▼]' }, { + caption: 'stop-other', value: 'stop("other scripts in sprite")', - meta: 'スプライトの他のスクリプトをを止める' + description: '[スプライトの他のスクリプトを止める▼]' + }, + { + caption: 'when_start_as_a_clone', + value: 'when_start_as_a_clone do\n\nend\n', + description: 'クローンされたとき' + }, + { + caption: 'create_clone', + value: 'create_clone("_myself_")', + description: '(自分自身▼) のクローンを作る' + }, + { + caption: 'delete_this_clone', + value: 'delete_this_clone', + description: 'このクローンを削除する' } ]; const completions = []; diff --git a/src/containers/ruby-tab/events-completer.js b/src/containers/ruby-tab/events-completer.js index 2592d6e0a5c..430a39ce3fe 100644 --- a/src/containers/ruby-tab/events-completer.js +++ b/src/containers/ruby-tab/events-completer.js @@ -1,46 +1,51 @@ -/** - * Define Ruby code completer for Motion Blocks - */ -class EventsCompleter { +import BaseCompleter from './base-completer'; + +class EventsCompleter extends BaseCompleter { getCompletions (editor, session, pos, prefix, callback) { const words = [ { - value: 'self.when(:flag_clicked) do\nend', - meta: '旗が押されたとき' + caption: 'when_flag_clicked', + value: 'when_flag_clicked do\n\nend\n', + description: '旗が押されたとき' }, { - value: 'self.when(:key_pressed, "space") do\nend', - meta: 'スペースキーが押されたとき' + caption: 'when_key_pressed', + value: 'when_key_pressed("space") do\n\nend\n', + description: '[スペース▼] キーが押されたとき' }, { - value: 'self.when(:clicked) do\nend', - meta: 'このスプライトがクリックされたとき' + caption: 'when_clicked', + value: 'when_clicked do\n\nend\n', + description: 'このスプライトが押されたとき' }, { - value: 'self.when(:backdrop_switches, "背景1") do\nend', - meta: '背景が背景1になったとき' + caption: 'when_backdrop_switches', + value: 'when_backdrop_switches("背景1") do\n\nend\n', + description: '背景が [背景1▼] になったとき' }, { - value: 'self.when(:greater_than, "loudness", 10) do\nend', - meta: '音量が10より小さいとき' + caption: 'when_greater_than', + value: 'when_greater_than("loudness", 10) do\n\nend\n', + description: '[音量▼] > (10) のとき' }, { - value: 'self.when(:receive, "メッセージ1") do\nend', - meta: 'メッセージ1を受け取ったとき' + caption: 'when_receive', + value: 'when_receive("メッセージ1") do\n\nend\n', + description: '[メッセージ1▼] を受け取ったとき' }, { + caption: 'broadcast', value: 'broadcast("メッセージ1")', - meta: 'メッセージ1を送る' + description: '(メッセージ1) を送る' }, { + caption: 'broadcast_and_wait', value: 'broadcast_and_wait("メッセージ1")', - meta: 'メッセージ1を送って待つ' + description: '(メッセージ1) を送って待つ' } ]; const completions = []; - words.forEach( - w => completions.push(w) - ); + words.forEach(w => completions.push(w)); callback(null, completions); } } diff --git a/src/containers/ruby-tab/gdx-for-completer.js b/src/containers/ruby-tab/gdx-for-completer.js deleted file mode 100644 index 1e6adbda174..00000000000 --- a/src/containers/ruby-tab/gdx-for-completer.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Define Ruby code completer for Go Direct Force & Acceleration Blocks - */ -class GdxForCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - value: 'self.when(:gdx_for_gesture, "shaken") do\nend', - meta: '振られたとき' - }, - { - value: 'self.when(:gdx_force_sensor, "pushed") do\nend', - meta: 'force sensor押されたとき' - }, - { - value: 'gdx_for_force', - meta: 'force' - }, - { - value: 'self.when(:gdx_for_tilted, "any") do\nend', - meta: 'どれかの向きに傾いたとき' - }, - { - value: 'gdx_for_tilted?("any")', - meta: 'どれかの向きに傾いた' - }, - { - value: 'gdx_for_tilt_angle("front")', - meta: '前方向の傾き' - }, - { - value: 'gdx_for_falling?', - meta: '落下中' - }, - { - value: 'gdx_for_spin_speed("z")', - meta: 'z回転の速さ' - }, - { - value: 'gdx_for_acceleration("x")', - meta: 'x方向への加速度' - } - ]; - const completions = []; - words.forEach( - w => completions.push(w) - ); - callback(null, completions); - } -} - -export default GdxForCompleter; diff --git a/src/containers/ruby-tab/looks-completer.js b/src/containers/ruby-tab/looks-completer.js new file mode 100644 index 00000000000..815429f06cb --- /dev/null +++ b/src/containers/ruby-tab/looks-completer.js @@ -0,0 +1,33 @@ +import BaseCompleter from './base-completer'; + +class LooksCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + caption: 'say-for', + value: 'say("こんにちは!", 2)', + description: '(こんにちは!) と (2) 秒言う' + }, + { + caption: 'say', + value: 'say("こんにちは!")', + description: '(こんにちは!) と言う' + }, + { + caption: 'think-for', + value: 'think("うーん...", 2)', + description: '(うーん...) と (2) 秒考える' + }, + { + caption: 'think', + value: 'think("うーん...")', + description: '(うーん...) と考える' + } + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default LooksCompleter; diff --git a/src/containers/ruby-tab/mesh-completer.js b/src/containers/ruby-tab/mesh-completer.js new file mode 100644 index 00000000000..a7d1a5cdb8a --- /dev/null +++ b/src/containers/ruby-tab/mesh-completer.js @@ -0,0 +1,18 @@ +import BaseCompleter from './base-completer'; + +class MeshCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + caption: 'mesh.sensor_value', + value: 'mesh.sensor_value(" ")', + description: '( ▼) センサーの値' + } + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default MeshCompleter; diff --git a/src/containers/ruby-tab/microbit-completer.js b/src/containers/ruby-tab/microbit-completer.js new file mode 100644 index 00000000000..511494530fe --- /dev/null +++ b/src/containers/ruby-tab/microbit-completer.js @@ -0,0 +1,58 @@ +import BaseCompleter from './base-completer'; + +class MicrobitCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + { + caption: 'microbit.when_button_pressed', + value: 'microbit.when_button_pressed("A") do\n\nend\n', + description: 'ボタン (A▼) が押されたとき' + }, + { + caption: 'microbit.button_pressed?', + value: 'microbit.button_pressed?("A")', + description: 'ボタン (A▼) が押された' + }, + { + caption: 'microbit.when', + value: 'microbit.when("moved") do\n\nend\n', + description: '(動いた▼) とき' + }, + { + caption: 'microbit.display_text', + value: 'microbit.display_text("こんにちは!")', + description: '(こんにちは!) を表示する' + }, + { + caption: 'microbit.display', + value: 'microbit.display(\n ".1.1.",\n "1.1.1",\n "1...1",\n ".1.1.",\n "..1.."\n)\n', + description: '(♡▼) を表示する' + }, + { + caption: 'microbit.when_tilted', + value: 'microbit.when_tilted("any") do\n\nend\n', + description: '(どれかの向き▼) に傾いたとき' + }, + { + caption: 'microbit.tilted?', + value: 'microbit.tilted?("any")', + description: '(どれかの向き▼) に傾いた' + }, + { + caption: 'microbit.tilt_angle', + value: 'microbit.tilt_angle("front")', + description: '(前▼) 方向の傾き' + }, + { + caption: 'microbit.when_pin_connected', + value: 'microbit.when_pin_connected(0) do\n\nend\n', + description: 'ピン (0▼) がつながったとき' + } + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default MicrobitCompleter; diff --git a/src/containers/ruby-tab/microbit-more-completer.js b/src/containers/ruby-tab/microbit-more-completer.js new file mode 100644 index 00000000000..a99303e805d --- /dev/null +++ b/src/containers/ruby-tab/microbit-more-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class MicrobitMoreCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default MicrobitMoreCompleter; diff --git a/src/containers/ruby-tab/microbit.js b/src/containers/ruby-tab/microbit.js deleted file mode 100644 index 746a1a4f6da..00000000000 --- a/src/containers/ruby-tab/microbit.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Define Ruby code completer for micro:bit Blocks - */ -class MicrobitCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - value: 'self.when(:microbit_button_pressed, "A") do\nend', - meta: 'ボタンAが押されたとき' - }, - { - value: 'microbit.button_pressed?("A")', - meta: 'ボタンAが押された' - }, - { - value: 'self.when(:microbit_gesture, "moved") do\nend', - meta: '動いたとき' - }, - { - value: 'microbit.display_text("Hello!")', - meta: 'Hello!を表示する' - }, - { - value: 'microbit.display(\n".1.1.",\n"1.1.1",\n"1...1",\n".1.1.",\n"..1.."\n)', - meta: 'ハートマークを表示する' - }, - { - value: 'self.when(:microbit_tilted, "any") do\nend', - meta: 'どれかの向きに傾いたとき' - }, - { - value: 'microbit.tilted?("any")', - meta: 'どれかの向きに傾いた' - }, - { - value: 'microbit.tilt_angle("front")', - meta: '前方向の傾き' - }, - { - value: 'self.when(:microbit_pin_connected, 0) do\nend', - meta: 'ピン0がつながったとき' - } - ]; - const completions = []; - words.forEach( - w => completions.push(w) - ); - callback(null, completions); - } -} - -export default MicrobitCompleter; diff --git a/src/containers/ruby-tab/motion-completer.js b/src/containers/ruby-tab/motion-completer.js index f921b517dbb..2b922cac9a9 100644 --- a/src/containers/ruby-tab/motion-completer.js +++ b/src/containers/ruby-tab/motion-completer.js @@ -1,86 +1,97 @@ -/** - * Define Ruby code completer for Motion Blocks - */ -class MotionCompleter { +import BaseCompleter from './base-completer'; + +class MotionCompleter extends BaseCompleter { getCompletions (editor, session, pos, prefix, callback) { const words = [ { + caption: 'move', value: 'move(10)', - meta: '10歩動かす' + description: '(10) 歩動かす' }, { + caption: 'turn_right', value: 'turn_right(15)', - meta: '時計回りに15度回す' + description: '時計回りに (15) 度回す' }, { + caption: 'turn_left', value: 'turn_left(15)', - meta: '反時計回りに15度回す' + description: '反時計回りに (15) 度回す' }, { + caption: 'go_to', value: 'go_to("_random_")', - meta: 'どこかの場所へ行く' + description: '(どこかの場所▼) へ行く' }, { + caption: 'go_to-xy', value: 'go_to([0, 0])', - meta: 'x座標を0、y座標を0にする' + description: 'x座標を (0) 、y座標を (0) にする' }, { + caption: 'glide', value: 'glide("_random_", secs: 1)', - meta: '1秒でどこかの場所へ行く' + description: '(1) 秒で (どこかの場所▼) へ行く' }, { + caption: 'glide-xy', value: 'glide([0, 0], secs: 1)', - meta: '1秒でx座標を0に、y座標を0にする' + description: '(1) 秒でx座標を (0) に、y座標を (0) にする' }, { + caption: 'direction=', value: 'self.direction = 90', - meta: '90度に向ける' + description: '(90) 度に向ける' }, { + caption: 'point_towards', value: 'point_towards("_mouse_")', - meta: 'マウスのポインターへ向ける' + description: '(マウスのポインター▼) へ向ける' }, { + caption: 'x+=', value: 'self.x += 10', - meta: 'x座標を10ずつ変える' + description: 'x座標を (10) ずつ変える' }, { + caption: 'x=', value: 'self.x = 0', - meta: 'x座標を0にする' + description: 'x座標を (0) にする' }, { + caption: 'y+=', value: 'self.y += 10', - meta: 'y座標を10ずつ変える' + description: 'y座標を (10) ずつ変える' }, { + captiono: 'y=', value: 'self.y = 0', - meta: 'y座標を9にする' + description: 'y座標を (0) にする' }, { value: 'bounce_if_on_edge', - meta: 'もし端についたら、跳ね返る' + description: 'もし端についたら、跳ね返る' }, { + caption: 'rotation_style=', value: 'self.rotation_style = "left-right"', - meta: '回転方法を左右のみにする' + description: '回転方法を [左右のみ▼] にする' }, { value: 'x', - meta: 'x座標' + description: 'x座標' }, { value: 'y', - meta: 'y座標' + description: 'y座標' }, { value: 'direction', - meta: '向き' + description: '向き' } ]; const completions = []; - words.forEach( - w => completions.push(w) - ); + words.forEach(w => completions.push(w)); callback(null, completions); } } diff --git a/src/containers/ruby-tab/music-completer.js b/src/containers/ruby-tab/music-completer.js new file mode 100644 index 00000000000..7f087ffaa1c --- /dev/null +++ b/src/containers/ruby-tab/music-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class MusicCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default MusicCompleter; diff --git a/src/containers/ruby-tab/operators-completer.js b/src/containers/ruby-tab/operators-completer.js new file mode 100644 index 00000000000..9dbb6340686 --- /dev/null +++ b/src/containers/ruby-tab/operators-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class OperatorsCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default OperatorsCompleter; diff --git a/src/containers/ruby-tab/pen-completer.js b/src/containers/ruby-tab/pen-completer.js new file mode 100644 index 00000000000..2e697089554 --- /dev/null +++ b/src/containers/ruby-tab/pen-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class PenCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default PenCompleter; diff --git a/src/containers/ruby-tab/sensing-completer.js b/src/containers/ruby-tab/sensing-completer.js index 488d2fd7d86..2958d1b1b14 100644 --- a/src/containers/ruby-tab/sensing-completer.js +++ b/src/containers/ruby-tab/sensing-completer.js @@ -1,90 +1,92 @@ -/** - * Define Ruby code completer for Sensing Blocks - */ -class SensingCompleter { +import BaseCompleter from './base-completer'; + +class SensingCompleter extends BaseCompleter { getCompletions (editor, session, pos, prefix, callback) { const words = [ { + caption: 'touching?', value: 'touching?("_mouse_")', - meta: 'マウスのポインターに触れた' + description: '(マウスのポインター▼) に触れた' }, { + caption: 'touching_color?', value: 'touching_color?("#571332")', - meta: '#571332の色に触れた' + description: '(#571332▼) 色に触れた' }, { + cation: 'color_is_touching_color?', value: 'color_is_touching_color?("#ce2ef7", "#6a7a0e")', - meta: '#ce2ef7が#6a7a0eの色に触れた' + description: '(#ce2ef7▼) 色が (#6a7a0e▼) 色に触れた' }, { + caption: 'distance', value: 'distance("_mouse_")', - meta: 'マウスのポインターまでの距離' + description: '(マウスのポインター▼) までの距離' }, { + caption: 'ask', value: 'ask("あなたの名前は何ですか?")', - meta: 'あなたの名前は何ですかと聞いて待つ' + description: '(あなたの名前は何ですか?) と聞いて待つ' }, { value: 'answer', - meta: '答え' + description: '答え' }, { value: 'Keyboard.pressed?("space")', - meta: 'スペースキーが押された' + description: 'スペースキーが押された' }, { value: 'Mouse.down?', - meta: 'マウスが押された' + description: 'マウスが押された' }, { value: 'Mouse.x', - meta: 'マウスのx座標' + description: 'マウスのx座標' }, { value: 'Mouse.y', - meta: 'マウスのy座標' + description: 'マウスのy座標' }, { value: 'self.drag_mode = "draggable"', - meta: 'ドラッグできるようにする' + description: 'ドラッグできるようにする' }, { value: 'loudness', - meta: '音量' + description: '音量' }, { value: 'Timer.value', - meta: 'タイマー' + description: 'タイマー' }, { value: 'Timer.reset', - meta: 'タイマーをリセット' + description: 'タイマーをリセット' }, { value: 'stage.backdrop_number', - meta: 'ステージの背景#' + description: 'ステージの背景#' }, { value: 'stage.backdrop_number', - meta: 'ステージの背景#' + description: 'ステージの背景#' }, { value: 'Time.now.year', - meta: '現在の年' + description: '現在の年' }, { value: 'days_since_2000', - meta: '2000年からの日数' + description: '2000年からの日数' }, { value: 'user_name', - meta: 'ユーザー名' + description: 'ユーザー名' } ]; const completions = []; - words.forEach( - w => completions.push(w) - ); + words.forEach(w => completions.push(w)); callback(null, completions); } } diff --git a/src/containers/ruby-tab/smalrubot-s1-completer.js b/src/containers/ruby-tab/smalrubot-s1-completer.js new file mode 100644 index 00000000000..b6bf5735e4f --- /dev/null +++ b/src/containers/ruby-tab/smalrubot-s1-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class SmalrubotS1Completer extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default SmalrubotS1Completer; diff --git a/src/containers/ruby-tab/sound-completer.js b/src/containers/ruby-tab/sound-completer.js index e1f0ca22dfa..0780e3282c9 100644 --- a/src/containers/ruby-tab/sound-completer.js +++ b/src/containers/ruby-tab/sound-completer.js @@ -1,50 +1,47 @@ -/** - * Define Ruby code completer for Motion Blocks - */ -class SoundCompleter { +import BaseCompleter from './base-completer'; + +class SoundCompleter extends BaseCompleter { getCompletions (editor, session, pos, prefix, callback) { const words = [ { value: 'play_until_done("ニャー")', - meta: '終わるまでニャーの音を鳴らす' + description: '終わるまでニャーの音を鳴らす' }, { value: 'play("ニャー")', - meta: 'ニャーの音を鳴らす' + description: 'ニャーの音を鳴らす' }, { value: 'stop_all_sounds', - meta: 'すべての音を止める' + description: 'すべての音を止める' }, { value: 'change_sound_effect_by("PITCH",10)', - meta: 'ピッチの効果を10ずつ変える' + description: 'ピッチの効果を10ずつ変える' }, { value: 'set_sound_effect("PITCH", 100)', - meta: 'ピッチの効果を100にする' + description: 'ピッチの効果を100にする' }, { value: 'clear_sound_effects', - meta: '音の効果をなくす' + description: '音の効果をなくす' }, { value: 'self.volume += -10', - meta: '音量を-10ずつ変える' + description: '音量を-10ずつ変える' }, { value: 'self.volume =100', - meta: '音量を100%にする' + description: '音量を100%にする' }, { value: 'volume', - meta: '音量' + description: '音量' } ]; const completions = []; - words.forEach( - w => completions.push(w) - ); + words.forEach(w => completions.push(w)); callback(null, completions); } } diff --git a/src/containers/ruby-tab/text-to-speech-completer.js b/src/containers/ruby-tab/text-to-speech-completer.js new file mode 100644 index 00000000000..05e6c13d9f1 --- /dev/null +++ b/src/containers/ruby-tab/text-to-speech-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class TextToSpeechCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default TextToSpeechCompleter; diff --git a/src/containers/ruby-tab/translate-completer.js b/src/containers/ruby-tab/translate-completer.js new file mode 100644 index 00000000000..8010cc7748c --- /dev/null +++ b/src/containers/ruby-tab/translate-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class TranslateCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default TranslateCompleter; diff --git a/src/containers/ruby-tab/variables-completer.js b/src/containers/ruby-tab/variables-completer.js new file mode 100644 index 00000000000..5060e76ce21 --- /dev/null +++ b/src/containers/ruby-tab/variables-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class VariablesCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default VariablesCompleter; diff --git a/src/containers/ruby-tab/video-sensing-completer.js b/src/containers/ruby-tab/video-sensing-completer.js new file mode 100644 index 00000000000..3d25affff1a --- /dev/null +++ b/src/containers/ruby-tab/video-sensing-completer.js @@ -0,0 +1,13 @@ +import BaseCompleter from './base-completer'; + +class VideoSensingCompleter extends BaseCompleter { + getCompletions (editor, session, pos, prefix, callback) { + const words = [ + ]; + const completions = []; + words.forEach(w => completions.push(w)); + callback(null, completions); + } +} + +export default VideoSensingCompleter; diff --git a/src/lib/ruby-generator/mesh.js b/src/lib/ruby-generator/mesh.js index fa2fc071836..243c1def96a 100644 --- a/src/lib/ruby-generator/mesh.js +++ b/src/lib/ruby-generator/mesh.js @@ -11,7 +11,7 @@ export default function (Generator) { Generator.mesh_getSensorValue = function (block) { const name = Generator.valueToCode(block, 'NAME', Generator.ORDER_NONE) || '" "'; - return [`mesh_sensor_value(${name})`, Generator.ORDER_ATOMIC]; + return [`mesh.sensor_value(${name})`, Generator.ORDER_ATOMIC]; }; return Generator; diff --git a/src/lib/ruby-to-blocks-converter/index.js b/src/lib/ruby-to-blocks-converter/index.js index 6a647860747..6062f138e41 100644 --- a/src/lib/ruby-to-blocks-converter/index.js +++ b/src/lib/ruby-to-blocks-converter/index.js @@ -87,7 +87,6 @@ class RubyToBlocksConverter { PenConverter, EV3Converter, GdxForConverter, - MeshConverter, SmalrubotS1Converter, BoostConverter, TranslateConverter, @@ -112,7 +111,8 @@ class RubyToBlocksConverter { VideoConverter, Text2SpeechConverter, Wedo2Converter, - MicrobitMoreConverter + MicrobitMoreConverter, + MeshConverter ].forEach(x => x.register(this)); } diff --git a/src/lib/ruby-to-blocks-converter/mesh.js b/src/lib/ruby-to-blocks-converter/mesh.js index 106e79725a7..91aad6f6864 100644 --- a/src/lib/ruby-to-blocks-converter/mesh.js +++ b/src/lib/ruby-to-blocks-converter/mesh.js @@ -1,27 +1,25 @@ -/* global Opal */ -import _ from 'lodash'; +const Mesh = 'mesh'; /** * Mesh extension converter */ const MeshConverter = { - // eslint-disable-next-line no-unused-vars - onSend: function (receiver, name, args, rubyBlockArgs, rubyBlock) { - let block; - if ((this._isSelf(receiver) || receiver === Opal.nil) && !rubyBlock) { - switch (name) { - case 'mesh_sensor_value': - if (args.length === 1 && this._isStringOrBlock(args[0])) { - block = this._createBlock('mesh_getSensorValue', 'statement'); - this._addFieldInput( - block, 'NAME', 'mesh_menu_variableNames', 'variableNames', - args[0], ' ' - ); - } - break; - } - } - return block; + register: function (converter) { + converter.registerCallMethod('self', Mesh, 0, params => { + const {node} = params; + + return converter.createRubyExpressionBlock(Mesh, node); + }); + + converter.registerCallMethod(Mesh, 'sensor_value', 1, params => { + const {receiver, args} = params; + + if (!converter.isStringOrBlock(args[0])) return null; + + const block = converter.changeRubyExpressionBlock(receiver, 'mesh_getSensorValue', 'value'); + converter.addFieldInput(block, 'NAME', 'mesh_menu_variableNames', 'variableNames', args[0], ' '); + return block; + }); } }; diff --git a/test/integration/ruby-tab/extension_mesh.test.js b/test/integration/ruby-tab/extension_mesh.test.js index 53553e684b5..ca0a0975787 100644 --- a/test/integration/ruby-tab/extension_mesh.test.js +++ b/test/integration/ruby-tab/extension_mesh.test.js @@ -29,7 +29,7 @@ describe('Ruby Tab: Mesh extension blocks', () => { await loadUri(urlFor('/')); const code = dedent` - mesh_sensor_value("mesh variable") + mesh.sensor_value("mesh variable") `; await expectInterconvertBetweenCodeAndRuby(code); }); From 15320a79a2954e7fce042905300633afd17befdf Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sat, 14 Oct 2023 23:03:22 +0900 Subject: [PATCH 11/18] test: change mesh.sensor_value --- test/unit/lib/ruby-to-blocks-converter/mesh.test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/unit/lib/ruby-to-blocks-converter/mesh.test.js b/test/unit/lib/ruby-to-blocks-converter/mesh.test.js index 1503266c2cd..09241082dd9 100644 --- a/test/unit/lib/ruby-to-blocks-converter/mesh.test.js +++ b/test/unit/lib/ruby-to-blocks-converter/mesh.test.js @@ -18,7 +18,7 @@ describe('RubyToBlocksConverter/Mesh', () => { }); test('mesh_getSensorValue', () => { - code = 'mesh_sensor_value(" ")'; + code = 'mesh.sensor_value(" ")'; expected = [ { opcode: 'mesh_getSensorValue', @@ -42,9 +42,9 @@ describe('RubyToBlocksConverter/Mesh', () => { convertAndExpectToEqualBlocks(converter, target, code, expected); [ - 'mesh_sensor_value()', - 'mesh_sensor_value(1)', - 'mesh_sensor_value("arg1", "arg2")' + 'mesh.sensor_value()', + 'mesh.sensor_value(1)', + 'mesh.sensor_value("arg1", "arg2")' ].forEach(s => { convertAndExpectRubyBlockError(converter, target, s); }); From a7136affd655bbeb00c05c8e448d9eb4679fd3fc Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sun, 15 Oct 2023 21:39:51 +0900 Subject: [PATCH 12/18] refactor: auto completion, use snippet --- src/containers/ruby-tab.jsx | 40 +---- src/containers/ruby-tab/base-completer.js | 22 ++- src/containers/ruby-tab/control-completer.js | 78 ---------- src/containers/ruby-tab/control-snippets.json | 54 +++++++ src/containers/ruby-tab/events-completer.js | 53 ------- src/containers/ruby-tab/events-snippets.json | 34 +++++ src/containers/ruby-tab/looks-completer.js | 33 ----- src/containers/ruby-tab/looks-snippets.json | 18 +++ src/containers/ruby-tab/mesh-completer.js | 18 --- src/containers/ruby-tab/mesh-snippets.json | 6 + src/containers/ruby-tab/microbit-completer.js | 58 -------- .../ruby-tab/microbit-more-completer.js | 13 -- .../ruby-tab/microbit-more-snippets.json | 6 + .../ruby-tab/microbit-snippets.json | 38 +++++ src/containers/ruby-tab/motion-completer.js | 99 ------------- src/containers/ruby-tab/motion-snippets.json | 94 ++++++++++++ src/containers/ruby-tab/music-completer.js | 13 -- src/containers/ruby-tab/music-snippets.json | 6 + .../ruby-tab/operators-completer.js | 13 -- .../ruby-tab/operators-snippets.json | 86 +++++++++++ src/containers/ruby-tab/pen-completer.js | 13 -- src/containers/ruby-tab/pen-snippets.json | 6 + src/containers/ruby-tab/sensing-completer.js | 94 ------------ src/containers/ruby-tab/sensing-snippets.json | 138 ++++++++++++++++++ .../ruby-tab/smalrubot-s1-completer.js | 13 -- .../ruby-tab/smalrubot-s1-snippets.json | 6 + src/containers/ruby-tab/snippets-completer.js | 62 ++++++++ src/containers/ruby-tab/sound-completer.js | 49 ------- src/containers/ruby-tab/sound-snippets.json | 38 +++++ .../ruby-tab/text-to-speech-completer.js | 13 -- .../ruby-tab/text-to-speech-snippets.json | 14 ++ .../ruby-tab/translate-completer.js | 13 -- .../ruby-tab/translate-snippets.json | 10 ++ .../ruby-tab/variables-completer.js | 13 -- .../ruby-tab/variables-snippets.json | 70 +++++++++ .../ruby-tab/video-sensing-completer.js | 13 -- .../ruby-tab/video-sensing-snippets.json | 18 +++ 37 files changed, 726 insertions(+), 639 deletions(-) delete mode 100644 src/containers/ruby-tab/control-completer.js create mode 100644 src/containers/ruby-tab/control-snippets.json delete mode 100644 src/containers/ruby-tab/events-completer.js create mode 100644 src/containers/ruby-tab/events-snippets.json delete mode 100644 src/containers/ruby-tab/looks-completer.js create mode 100644 src/containers/ruby-tab/looks-snippets.json delete mode 100644 src/containers/ruby-tab/mesh-completer.js create mode 100644 src/containers/ruby-tab/mesh-snippets.json delete mode 100644 src/containers/ruby-tab/microbit-completer.js delete mode 100644 src/containers/ruby-tab/microbit-more-completer.js create mode 100644 src/containers/ruby-tab/microbit-more-snippets.json create mode 100644 src/containers/ruby-tab/microbit-snippets.json delete mode 100644 src/containers/ruby-tab/motion-completer.js create mode 100644 src/containers/ruby-tab/motion-snippets.json delete mode 100644 src/containers/ruby-tab/music-completer.js create mode 100644 src/containers/ruby-tab/music-snippets.json delete mode 100644 src/containers/ruby-tab/operators-completer.js create mode 100644 src/containers/ruby-tab/operators-snippets.json delete mode 100644 src/containers/ruby-tab/pen-completer.js create mode 100644 src/containers/ruby-tab/pen-snippets.json delete mode 100644 src/containers/ruby-tab/sensing-completer.js create mode 100644 src/containers/ruby-tab/sensing-snippets.json delete mode 100644 src/containers/ruby-tab/smalrubot-s1-completer.js create mode 100644 src/containers/ruby-tab/smalrubot-s1-snippets.json create mode 100644 src/containers/ruby-tab/snippets-completer.js delete mode 100644 src/containers/ruby-tab/sound-completer.js create mode 100644 src/containers/ruby-tab/sound-snippets.json delete mode 100644 src/containers/ruby-tab/text-to-speech-completer.js create mode 100644 src/containers/ruby-tab/text-to-speech-snippets.json delete mode 100644 src/containers/ruby-tab/translate-completer.js create mode 100644 src/containers/ruby-tab/translate-snippets.json delete mode 100644 src/containers/ruby-tab/variables-completer.js create mode 100644 src/containers/ruby-tab/variables-snippets.json delete mode 100644 src/containers/ruby-tab/video-sensing-completer.js create mode 100644 src/containers/ruby-tab/video-sensing-snippets.json diff --git a/src/containers/ruby-tab.jsx b/src/containers/ruby-tab.jsx index 6671727e963..06d21eaf4e9 100644 --- a/src/containers/ruby-tab.jsx +++ b/src/containers/ruby-tab.jsx @@ -19,24 +19,7 @@ import 'ace-builds/src-noconflict/theme-clouds'; import 'ace-builds/src-noconflict/ext-searchbox'; import 'ace-builds/src-noconflict/ext-language_tools'; -import MotionCompleter from './ruby-tab/motion-completer'; -import LooksCompleter from './ruby-tab/looks-completer'; -import SoundCompleter from './ruby-tab/sound-completer'; -import EventsCompleter from './ruby-tab/events-completer'; -import ControlCompleter from './ruby-tab/control-completer'; -import SensingCompleter from './ruby-tab/sensing-completer'; -import OperatorsCompleter from './ruby-tab/operators-completer'; -import VariablesCompleter from './ruby-tab/variables-completer'; - -import MusicCompleter from './ruby-tab/music-completer'; -import PenCompleter from './ruby-tab/pen-completer'; -import VideoSensingCompleter from './ruby-tab/video-sensing-completer'; -import TextToSpeechCompleter from './ruby-tab/text-to-speech-completer'; -import TranslateCompleter from './ruby-tab/translate-completer'; -import MicrobitCompleter from './ruby-tab/microbit-completer'; -import MeshCompleter from './ruby-tab/mesh-completer'; -import SmalrubotS1Completer from './ruby-tab/smalrubot-s1-completer'; -import MicrobitMoreCompleter from './ruby-tab/microbit-more-completer'; +import SnippetsCompleter from './ruby-tab/snippets-completer'; class RubyTab extends React.Component { constructor (props) { @@ -107,26 +90,7 @@ class RubyTab extends React.Component { markers } = rubyCode; - const completers = [ - new MotionCompleter(), - new LooksCompleter(), - new SoundCompleter(), - new EventsCompleter(), - new ControlCompleter(), - new SensingCompleter(), - new OperatorsCompleter(), - new VariablesCompleter(), - - new MusicCompleter(), - new PenCompleter(), - new VideoSensingCompleter(), - new TextToSpeechCompleter(), - new TranslateCompleter(), - new MicrobitCompleter(), - new MeshCompleter(), - new SmalrubotS1Completer(), - new MicrobitMoreCompleter() - ]; + const completers = [new SnippetsCompleter()]; return ( ', item.description || item.value, '', '
', - '', item.value, '' + '', this.#escapeHTML(description), '', '
', + '', this.#escapeHTML(code), '' ].join(''); } } + + #escapeHTML (str) { + return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/ なら' - }, - { - caption: 'if-else', - value: 'if false\n\nelse\n\nend\n', - description: 'もし < > なら、でなければ' - }, - { - caption: 'wait-until', - value: 'wait until false', - description: '< > まで待つ' - }, - { - caption: 'until', - value: 'until false\n\nend\n', - description: '< > まで繰り返す' - }, - { - caption: 'stop-all', - value: 'stop("all")', - description: '[すべてを止める▼]' - }, - { - caption: 'stop-this', - value: 'stop("this script")', - description: '[このスクリプトを止める▼]' - }, - { - caption: 'stop-other', - value: 'stop("other scripts in sprite")', - description: '[スプライトの他のスクリプトを止める▼]' - }, - { - caption: 'when_start_as_a_clone', - value: 'when_start_as_a_clone do\n\nend\n', - description: 'クローンされたとき' - }, - { - caption: 'create_clone', - value: 'create_clone("_myself_")', - description: '(自分自身▼) のクローンを作る' - }, - { - caption: 'delete_this_clone', - value: 'delete_this_clone', - description: 'このクローンを削除する' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default ControlCompleter; diff --git a/src/containers/ruby-tab/control-snippets.json b/src/containers/ruby-tab/control-snippets.json new file mode 100644 index 00000000000..6995d3775ec --- /dev/null +++ b/src/containers/ruby-tab/control-snippets.json @@ -0,0 +1,54 @@ +{ + "sleep": { + "snippet": "sleep(${1:1})", + "description": "(1) 秒待つ" + }, + "times": { + "snippet": "${1:10}.times do\n${2}\nend\n", + "description": "(10) 回繰り返す" + }, + "loop": { + "snippet": "loop do\n${1}\nend\n", + "description": "ずっと" + }, + "if": { + "snippet": "if ${1:false}\n${2}\nend\n", + "description": "もし < > なら" + }, + "if-else": { + "snippet": "if ${1:false}\n${2}\nelse\n${3}\nend\n", + "description": "もし < > なら、でなければ" + }, + "wait-until": { + "snippet": "wait until ${1:false}", + "description": "< > まで待つ" + }, + "until": { + "snippet": "until ${1:false}\n${2}\nend\n", + "description": "< > まで繰り返す" + }, + "stop-all": { + "snippet": "stop(\"${1:all}\")", + "description": "[すべてを止める▼]" + }, + "stop-this": { + "snippet": "stop(\"${1:this script}\")", + "description": "[このスクリプトを止める▼]" + }, + "stop-other": { + "snippet": "stop(\"${1:other scripts in sprite}\")", + "description": "[スプライトの他のスクリプトを止める▼]" + }, + "when_start_as_a_clone": { + "snippet": "when_start_as_a_clone do\n${1}\nend\n", + "description": "クローンされたとき" + }, + "create_clone": { + "snippet": "create_clone(\"${1:_myself_}\")", + "description": "(自分自身▼) のクローンを作る" + }, + "delete_this_clone": { + "snippet": "delete_this_clone", + "description": "このクローンを削除する" + } +} diff --git a/src/containers/ruby-tab/events-completer.js b/src/containers/ruby-tab/events-completer.js deleted file mode 100644 index 430a39ce3fe..00000000000 --- a/src/containers/ruby-tab/events-completer.js +++ /dev/null @@ -1,53 +0,0 @@ -import BaseCompleter from './base-completer'; - -class EventsCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - caption: 'when_flag_clicked', - value: 'when_flag_clicked do\n\nend\n', - description: '旗が押されたとき' - }, - { - caption: 'when_key_pressed', - value: 'when_key_pressed("space") do\n\nend\n', - description: '[スペース▼] キーが押されたとき' - }, - { - caption: 'when_clicked', - value: 'when_clicked do\n\nend\n', - description: 'このスプライトが押されたとき' - }, - { - caption: 'when_backdrop_switches', - value: 'when_backdrop_switches("背景1") do\n\nend\n', - description: '背景が [背景1▼] になったとき' - }, - { - caption: 'when_greater_than', - value: 'when_greater_than("loudness", 10) do\n\nend\n', - description: '[音量▼] > (10) のとき' - }, - { - caption: 'when_receive', - value: 'when_receive("メッセージ1") do\n\nend\n', - description: '[メッセージ1▼] を受け取ったとき' - }, - { - caption: 'broadcast', - value: 'broadcast("メッセージ1")', - description: '(メッセージ1) を送る' - }, - { - caption: 'broadcast_and_wait', - value: 'broadcast_and_wait("メッセージ1")', - description: '(メッセージ1) を送って待つ' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default EventsCompleter; diff --git a/src/containers/ruby-tab/events-snippets.json b/src/containers/ruby-tab/events-snippets.json new file mode 100644 index 00000000000..76100877a82 --- /dev/null +++ b/src/containers/ruby-tab/events-snippets.json @@ -0,0 +1,34 @@ +{ + "when_flag_clicked": { + "snippet": "when_flag_clicked do\n${1}\nend\n", + "description": "旗が押されたとき" + }, + "when_key_pressed": { + "snippet": "when_key_pressed(\"${1:space}\") do\n${2}\nend\n", + "description": "[スペース▼] キーが押されたとき" + }, + "when_clicked": { + "snippet": "when_clicked do\n${1}\nend\n", + "description": "このスプライトが押されたとき" + }, + "when_backdrop_switches": { + "snippet": "when_backdrop_switches(\"${1:背景1}\") do\n${2}\nend\n", + "description": "背景が [背景1▼] になったとき" + }, + "when_greater_than": { + "snippet": "when_greater_than(\"${1:loudness}\", ${2:10}) do\n${3}\nend\n", + "description": "[音量▼] > (10) のとき" + }, + "when_receive": { + "snippet": "when_receive(\"${1:メッセージ1}\") do\n${2}\nend\n", + "description": "[メッセージ1▼] を受け取ったとき" + }, + "broadcast": { + "snippet": "broadcast(\"${1:メッセージ1}\")", + "description": "(メッセージ1) を送る" + }, + "broadcast_and_wait": { + "snippet": "broadcast_and_wait(\"${1:メッセージ1}\")", + "description": "(メッセージ1) を送って待つ" + } +} diff --git a/src/containers/ruby-tab/looks-completer.js b/src/containers/ruby-tab/looks-completer.js deleted file mode 100644 index 815429f06cb..00000000000 --- a/src/containers/ruby-tab/looks-completer.js +++ /dev/null @@ -1,33 +0,0 @@ -import BaseCompleter from './base-completer'; - -class LooksCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - caption: 'say-for', - value: 'say("こんにちは!", 2)', - description: '(こんにちは!) と (2) 秒言う' - }, - { - caption: 'say', - value: 'say("こんにちは!")', - description: '(こんにちは!) と言う' - }, - { - caption: 'think-for', - value: 'think("うーん...", 2)', - description: '(うーん...) と (2) 秒考える' - }, - { - caption: 'think', - value: 'think("うーん...")', - description: '(うーん...) と考える' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default LooksCompleter; diff --git a/src/containers/ruby-tab/looks-snippets.json b/src/containers/ruby-tab/looks-snippets.json new file mode 100644 index 00000000000..591e32228de --- /dev/null +++ b/src/containers/ruby-tab/looks-snippets.json @@ -0,0 +1,18 @@ +{ + "say-for": { + "snippet": "say(\"${1:こんにちは!}\", ${2:2})", + "description": "(こんにちは!) と (2) 秒言う" + }, + "say": { + "snippet": "say(\"${1:こんにちは!}\")", + "description": "(こんにちは!) と言う" + }, + "think-for": { + "snippet": "think(\"${1:うーん...}\", ${2:2})", + "description": "(うーん...) と (2) 秒考える" + }, + "think": { + "snippet": "think(\"${1:うーん...}\")", + "description": "(うーん...) と考える" + } +} diff --git a/src/containers/ruby-tab/mesh-completer.js b/src/containers/ruby-tab/mesh-completer.js deleted file mode 100644 index a7d1a5cdb8a..00000000000 --- a/src/containers/ruby-tab/mesh-completer.js +++ /dev/null @@ -1,18 +0,0 @@ -import BaseCompleter from './base-completer'; - -class MeshCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - caption: 'mesh.sensor_value', - value: 'mesh.sensor_value(" ")', - description: '( ▼) センサーの値' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default MeshCompleter; diff --git a/src/containers/ruby-tab/mesh-snippets.json b/src/containers/ruby-tab/mesh-snippets.json new file mode 100644 index 00000000000..ba8d9f8525c --- /dev/null +++ b/src/containers/ruby-tab/mesh-snippets.json @@ -0,0 +1,6 @@ +{ + "mesh.sensor_value": { + "snippet": "mesh.sensor_value(\"${1: }\")", + "description": "( ▼) センサーの値" + } +} diff --git a/src/containers/ruby-tab/microbit-completer.js b/src/containers/ruby-tab/microbit-completer.js deleted file mode 100644 index 511494530fe..00000000000 --- a/src/containers/ruby-tab/microbit-completer.js +++ /dev/null @@ -1,58 +0,0 @@ -import BaseCompleter from './base-completer'; - -class MicrobitCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - caption: 'microbit.when_button_pressed', - value: 'microbit.when_button_pressed("A") do\n\nend\n', - description: 'ボタン (A▼) が押されたとき' - }, - { - caption: 'microbit.button_pressed?', - value: 'microbit.button_pressed?("A")', - description: 'ボタン (A▼) が押された' - }, - { - caption: 'microbit.when', - value: 'microbit.when("moved") do\n\nend\n', - description: '(動いた▼) とき' - }, - { - caption: 'microbit.display_text', - value: 'microbit.display_text("こんにちは!")', - description: '(こんにちは!) を表示する' - }, - { - caption: 'microbit.display', - value: 'microbit.display(\n ".1.1.",\n "1.1.1",\n "1...1",\n ".1.1.",\n "..1.."\n)\n', - description: '(♡▼) を表示する' - }, - { - caption: 'microbit.when_tilted', - value: 'microbit.when_tilted("any") do\n\nend\n', - description: '(どれかの向き▼) に傾いたとき' - }, - { - caption: 'microbit.tilted?', - value: 'microbit.tilted?("any")', - description: '(どれかの向き▼) に傾いた' - }, - { - caption: 'microbit.tilt_angle', - value: 'microbit.tilt_angle("front")', - description: '(前▼) 方向の傾き' - }, - { - caption: 'microbit.when_pin_connected', - value: 'microbit.when_pin_connected(0) do\n\nend\n', - description: 'ピン (0▼) がつながったとき' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default MicrobitCompleter; diff --git a/src/containers/ruby-tab/microbit-more-completer.js b/src/containers/ruby-tab/microbit-more-completer.js deleted file mode 100644 index a99303e805d..00000000000 --- a/src/containers/ruby-tab/microbit-more-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class MicrobitMoreCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default MicrobitMoreCompleter; diff --git a/src/containers/ruby-tab/microbit-more-snippets.json b/src/containers/ruby-tab/microbit-more-snippets.json new file mode 100644 index 00000000000..d44bca483f7 --- /dev/null +++ b/src/containers/ruby-tab/microbit-more-snippets.json @@ -0,0 +1,6 @@ +{ + "microbit_more.when_button_is": { + "snippet": "microbit_more.when_button_is(\"${1:A}\", \"${2:down}\") do\n${3}\nend\n", + "description": "ボタン [A▼] が [押された▼] とき" + } +} diff --git a/src/containers/ruby-tab/microbit-snippets.json b/src/containers/ruby-tab/microbit-snippets.json new file mode 100644 index 00000000000..1654c8d80b5 --- /dev/null +++ b/src/containers/ruby-tab/microbit-snippets.json @@ -0,0 +1,38 @@ +{ + "microbit.when_button_pressed": { + "snippet": "microbit.when_button_pressed(\"${1:A}\") do\n${2}\nend\n", + "description": "ボタン (A▼) が押されたとき" + }, + "microbit.button_pressed?": { + "snippet": "microbit.button_pressed?(\"${1:A}\")", + "description": "ボタン (A▼) が押された" + }, + "microbit.when": { + "snippet": "microbit.when(\"${1:moved}\") do\n${2}\nend\n", + "description": "(動いた▼) とき" + }, + "microbit.display_text": { + "snippet": "microbit.display_text(\"${1:こんにちは!}\")", + "description": "(こんにちは!) を表示する" + }, + "microbit.display": { + "snippet": "microbit.display(\n \"${1:.1.1.}\",\n \"${2:1.1.1}\",\n \"${3:1...1}\",\n \"${4:.1.1.}\",\n \"${5:..1..}\"\n)\n", + "description": "(♡▼) を表示する" + }, + "microbit.when_tilted": { + "snippet": "microbit.when_tilted(\"${1:any}\") do\n${2}\nend\n", + "description": "(どれかの向き▼) に傾いたとき" + }, + "microbit.tilted?": { + "snippet": "microbit.tilted?(\"${1:any}\")", + "description": "(どれかの向き▼) に傾いた" + }, + "microbit.tilt_angle": { + "snippet": "microbit.tilt_angle(\"${1:front}\")", + "description": "(前▼) 方向の傾き" + }, + "microbit.when_pin_connected": { + "snippet": "microbit.when_pin_connected(${1:0}) do\n${2}\nend\n", + "description": "ピン (0▼) がつながったとき" + } +} diff --git a/src/containers/ruby-tab/motion-completer.js b/src/containers/ruby-tab/motion-completer.js deleted file mode 100644 index 2b922cac9a9..00000000000 --- a/src/containers/ruby-tab/motion-completer.js +++ /dev/null @@ -1,99 +0,0 @@ -import BaseCompleter from './base-completer'; - -class MotionCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - caption: 'move', - value: 'move(10)', - description: '(10) 歩動かす' - }, - { - caption: 'turn_right', - value: 'turn_right(15)', - description: '時計回りに (15) 度回す' - }, - { - caption: 'turn_left', - value: 'turn_left(15)', - description: '反時計回りに (15) 度回す' - }, - { - caption: 'go_to', - value: 'go_to("_random_")', - description: '(どこかの場所▼) へ行く' - }, - { - caption: 'go_to-xy', - value: 'go_to([0, 0])', - description: 'x座標を (0) 、y座標を (0) にする' - }, - { - caption: 'glide', - value: 'glide("_random_", secs: 1)', - description: '(1) 秒で (どこかの場所▼) へ行く' - }, - { - caption: 'glide-xy', - value: 'glide([0, 0], secs: 1)', - description: '(1) 秒でx座標を (0) に、y座標を (0) にする' - }, - { - caption: 'direction=', - value: 'self.direction = 90', - description: '(90) 度に向ける' - }, - { - caption: 'point_towards', - value: 'point_towards("_mouse_")', - description: '(マウスのポインター▼) へ向ける' - }, - { - caption: 'x+=', - value: 'self.x += 10', - description: 'x座標を (10) ずつ変える' - }, - { - caption: 'x=', - value: 'self.x = 0', - description: 'x座標を (0) にする' - }, - { - caption: 'y+=', - value: 'self.y += 10', - description: 'y座標を (10) ずつ変える' - }, - { - captiono: 'y=', - value: 'self.y = 0', - description: 'y座標を (0) にする' - }, - { - value: 'bounce_if_on_edge', - description: 'もし端についたら、跳ね返る' - }, - { - caption: 'rotation_style=', - value: 'self.rotation_style = "left-right"', - description: '回転方法を [左右のみ▼] にする' - }, - { - value: 'x', - description: 'x座標' - }, - { - value: 'y', - description: 'y座標' - }, - { - value: 'direction', - description: '向き' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default MotionCompleter; diff --git a/src/containers/ruby-tab/motion-snippets.json b/src/containers/ruby-tab/motion-snippets.json new file mode 100644 index 00000000000..26458007142 --- /dev/null +++ b/src/containers/ruby-tab/motion-snippets.json @@ -0,0 +1,94 @@ +{ + "move": { + "snippet": "move(${1:10})", + "description": "(10) 歩動かす" + }, + "turn_right": { + "snippet": "turn_right(${1:15})", + "description": "時計回りに (15) 度回す" + }, + "turn_left": { + "snippet": "turn_left(${1:15})", + "description": "反時計回りに (15) 度回す" + }, + "go_to": { + "snippet": "go_to(\"${1:_random_}\")", + "description": "(どこかの場所▼) へ行く" + }, + "_random_": { + "snippet": "_random_", + "description": "どこかの場所" + }, + "_mouse_": { + "snippet": "_mouse_", + "description": "マウスのポインター" + }, + "go_to-xy": { + "snippet": "go_to([${1:0}, ${2:0}])", + "description": "x座標を (0) 、y座標を (0) にする" + }, + "glide": { + "snippet": "glide(\"${1:_random_}\", secs: ${2:1})", + "description": "(1) 秒で (どこかの場所▼) へ行く" + }, + "glide-xy": { + "snippet": "glide([${1:0}, ${2:0}], secs: ${3:1})", + "description": "(1) 秒でx座標を (0) に、y座標を (0) にする" + }, + "direction=": { + "snippet": "self.direction = ${1:90}", + "description": "(90) 度に向ける" + }, + "point_towards": { + "snippet": "point_towards(\"${1:_mouse_}\")", + "description": "(マウスのポインター▼) へ向ける" + }, + "x+=": { + "snippet": "self.x += ${1:10}", + "description": "x座標を (10) ずつ変える" + }, + "x=": { + "snippet": "self.x = ${1:0}", + "description": "x座標を (0) にする" + }, + "y+=": { + "snippet": "self.y += ${1:10}", + "description": "y座標を (10) ずつ変える" + }, + "y=": { + "snippet": "self.y = ${1:0}", + "description": "y座標を (0) にする" + }, + "bounce_if_on_edge": { + "snippet": "bounce_if_on_edge", + "description": "もし端についたら、跳ね返る" + }, + "rotation_style=": { + "snippet": "self.rotation_style = \"${1:left-right}\"", + "description": "回転方法を [左右のみ▼] にする" + }, + "left-right": { + "snippet": "left-right", + "description": "左右のみ" + }, + "don't_rotate": { + "snippet": "don't rotate", + "description": "回転しない" + }, + "all_around": { + "snippet": "all around", + "description": "自由に回転" + }, + "x": { + "snippet": "x", + "description": "x座標" + }, + "y": { + "snippet": "y", + "description": "y座標" + }, + "direction": { + "snippet": "direction", + "description": "向き" + } +} diff --git a/src/containers/ruby-tab/music-completer.js b/src/containers/ruby-tab/music-completer.js deleted file mode 100644 index 7f087ffaa1c..00000000000 --- a/src/containers/ruby-tab/music-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class MusicCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default MusicCompleter; diff --git a/src/containers/ruby-tab/music-snippets.json b/src/containers/ruby-tab/music-snippets.json new file mode 100644 index 00000000000..c46e0623136 --- /dev/null +++ b/src/containers/ruby-tab/music-snippets.json @@ -0,0 +1,6 @@ +{ + "music.play_drum": { + "snippet": "play_drum(drum: ${1:1}, beats: ${2:0.25})", + "description": "((1)スネアドラム▼) のドラムを (0.25) 拍鳴らす" + } +} diff --git a/src/containers/ruby-tab/operators-completer.js b/src/containers/ruby-tab/operators-completer.js deleted file mode 100644 index 9dbb6340686..00000000000 --- a/src/containers/ruby-tab/operators-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class OperatorsCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default OperatorsCompleter; diff --git a/src/containers/ruby-tab/operators-snippets.json b/src/containers/ruby-tab/operators-snippets.json new file mode 100644 index 00000000000..705d771f37d --- /dev/null +++ b/src/containers/ruby-tab/operators-snippets.json @@ -0,0 +1,86 @@ +{ + "rand": { + "snippet": "rand(${1:1}..${2:10})", + "description": "(1) から (10) までの乱数" + }, + "and": { + "snippet": "${1:false} && ${2:false}", + "description": "< > かつ < >" + }, + "or": { + "snippet": "${1:false} || ${2:false}", + "description": "< > または < >" + }, + "not": { + "snippet": "!${1:false}", + "description": "< > ではない" + }, + "string+": { + "snippet": "\"${1:りんご}\" + \"${2:バナナ}\"", + "description": "(りんご) と (バナナ)" + }, + "string[]": { + "snippet": "\"${1:りんご}\"[${2:1}]", + "description": "(りんご) の (1) 番目の文字" + }, + "string.length": { + "snippet": "\"${1:りんご}\".length", + "description": "(りんご) の長さ" + }, + "string.include?": { + "snippet": "\"${1:りんご}\".include?(\"${2:り}\")", + "description": "(りんご) に (り) が含まれる" + }, + "round": { + "snippet": "${1:0}.round", + "description": "(0) を四捨五入" + }, + "abs": { + "snippet": "${1:0}.abs", + "description": "(0) の [絶対値▼]" + }, + "floor": { + "snippet": "${1:0}.floor", + "description": "(0) の [切り下げ▼]" + }, + "ceil": { + "snippet": "${1:0}.ceil", + "description": "(0) の [切り上げ▼]" + }, + "sqrt": { + "snippet": "Math.sqrt(${1:0})", + "description": "(0) の [平方根▼]" + }, + "sin": { + "snippet": "Math.sin(${1:0})", + "description": "(0) の [sin▼]" + }, + "cos": { + "snippet": "Math.cos(${1:0})", + "description": "(0) の [cons▼]" + }, + "tan": { + "snippet": "Math.tan(${1:0})", + "description": "(0) の [tan▼]" + }, + "asin": { + "snippet": "Math.asin(${1:0})", + "description": "(0) の [asin▼]" + }, + "acos": { + "snippet": "Math.acos(${1:0})", + "description": "(0) の [acos▼]" + }, + "atan": { + "snippet": "Math.atan(${1:0})", + "description": "(0) の [atan▼]" + }, + "log": { + "snippet": "Math.log(${1:0})", + "description": "(0) の [In▼]" + }, + "log10": { + "snippet": "Math.log10(${1:0})", + "description": "(0) の [log▼]" + } +} diff --git a/src/containers/ruby-tab/pen-completer.js b/src/containers/ruby-tab/pen-completer.js deleted file mode 100644 index 2e697089554..00000000000 --- a/src/containers/ruby-tab/pen-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class PenCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default PenCompleter; diff --git a/src/containers/ruby-tab/pen-snippets.json b/src/containers/ruby-tab/pen-snippets.json new file mode 100644 index 00000000000..cf96c0df3ac --- /dev/null +++ b/src/containers/ruby-tab/pen-snippets.json @@ -0,0 +1,6 @@ +{ + "pen.clear": { + "snippet": "pen_clear", + "description": "全部消す" + } +} diff --git a/src/containers/ruby-tab/sensing-completer.js b/src/containers/ruby-tab/sensing-completer.js deleted file mode 100644 index 2958d1b1b14..00000000000 --- a/src/containers/ruby-tab/sensing-completer.js +++ /dev/null @@ -1,94 +0,0 @@ -import BaseCompleter from './base-completer'; - -class SensingCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - caption: 'touching?', - value: 'touching?("_mouse_")', - description: '(マウスのポインター▼) に触れた' - }, - { - caption: 'touching_color?', - value: 'touching_color?("#571332")', - description: '(#571332▼) 色に触れた' - }, - { - cation: 'color_is_touching_color?', - value: 'color_is_touching_color?("#ce2ef7", "#6a7a0e")', - description: '(#ce2ef7▼) 色が (#6a7a0e▼) 色に触れた' - }, - { - caption: 'distance', - value: 'distance("_mouse_")', - description: '(マウスのポインター▼) までの距離' - }, - { - caption: 'ask', - value: 'ask("あなたの名前は何ですか?")', - description: '(あなたの名前は何ですか?) と聞いて待つ' - }, - { - value: 'answer', - description: '答え' - }, - { - value: 'Keyboard.pressed?("space")', - description: 'スペースキーが押された' - }, - { - value: 'Mouse.down?', - description: 'マウスが押された' - }, - { - value: 'Mouse.x', - description: 'マウスのx座標' - }, - { - value: 'Mouse.y', - description: 'マウスのy座標' - }, - { - value: 'self.drag_mode = "draggable"', - description: 'ドラッグできるようにする' - }, - { - value: 'loudness', - description: '音量' - }, - { - value: 'Timer.value', - description: 'タイマー' - }, - { - value: 'Timer.reset', - description: 'タイマーをリセット' - }, - { - value: 'stage.backdrop_number', - description: 'ステージの背景#' - }, - { - value: 'stage.backdrop_number', - description: 'ステージの背景#' - }, - { - value: 'Time.now.year', - description: '現在の年' - }, - { - value: 'days_since_2000', - description: '2000年からの日数' - }, - { - value: 'user_name', - description: 'ユーザー名' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default SensingCompleter; diff --git a/src/containers/ruby-tab/sensing-snippets.json b/src/containers/ruby-tab/sensing-snippets.json new file mode 100644 index 00000000000..6eb3fa0a6d1 --- /dev/null +++ b/src/containers/ruby-tab/sensing-snippets.json @@ -0,0 +1,138 @@ +{ + "touching?": { + "snippet": "touching?(\"${1:_mouse_}\")", + "description": "(マウスのポインター▼) に触れた" + }, + "touching_color?": { + "snippet": "touching_color?(\"${1:#571332}\")", + "description": "(#571332▼) 色に触れた" + }, + "color_is_touching_color?": { + "snippet": "color_is_touching_color?(\"#${1:ce2ef7}\", \"#${2:6a7a0e}\")", + "description": "(#ce2ef7▼) 色が (#6a7a0e▼) 色に触れた" + }, + "distance": { + "snippet": "distance(\"${1:_mouse_}\")", + "description": "(マウスのポインター▼) までの距離" + }, + "ask": { + "snippet": "ask(\"${1:あなたの名前は何ですか?}\")", + "description": "(あなたの名前は何ですか?) と聞いて待つ" + }, + "answer": { + "snippet": "answer", + "description": "答え" + }, + "Keyboard.pressed?": { + "snippet": "Keyboard.pressed?(\"${1:space}\")", + "description": "[スペースキー▼] が押された" + }, + "Mouse.down?": { + "snippet": "Mouse.down?", + "description": "マウスが押された" + }, + "Mouse.x": { + "snippet": "Mouse.x", + "description": "マウスのx座標" + }, + "Mouse.y": { + "snippet": "Mouse.y", + "description": "マウスのy座標" + }, + "drag_mode=": { + "snippet": "self.drag_mode = \"${1:draggable}\"", + "description": "ドラッグ [できる▼] ようにする" + }, + "loudness": { + "snippet": "loudness", + "description": "音量" + }, + "Timer.value": { + "snippet": "Timer.value", + "description": "タイマー" + }, + "Timer.reset": { + "snippet": "Timer.reset", + "description": "タイマーをリセット" + }, + "stage.backdrop_number": { + "snippet": "stage.backdrop_number", + "description": "(ステージ▼) の [背景#▼]" + }, + "stage.backdrop_name": { + "snippet": "stage.backdrop_name", + "description": "(ステージ▼) の [背景の名前▼]" + }, + "stage.volume": { + "snippet": "stage.volume", + "description": "(ステージ▼) の [音量▼]" + }, + "stage.variable": { + "snippet": "stage.variable(\"${1:変数}\")", + "description": "(ステージ▼) の [変数▼]" + }, + "sprite.x": { + "snippet": "sprite(\"${1:スプライト1}\").x", + "description": "(スプライト1▼) の [x座標▼]" + }, + "sprite.y": { + "snippet": "sprite(\"${1:スプライト1}\").y", + "description": "(スプライト1▼) の [y座標▼]" + }, + "sprite.direction": { + "snippet": "sprite(\"${1:スプライト1}\").direction", + "description": "(スプライト1▼) の [向き▼]" + }, + "sprite.costume_number": { + "snippet": "sprite(\"${1:スプライト1}\").costume_number", + "description": "(スプライト1▼) の [コスチューム#▼]" + }, + "sprite.costume_name": { + "snippet": "sprite(\"${1:スプライト1}\").costume_name", + "description": "(スプライト1▼) の [コスチューム名▼]" + }, + "sprite.size": { + "snippet": "sprite(\"${1:スプライト1}\").size", + "description": "(スプライト1▼) の [大きさ▼]" + }, + "sprite.volume": { + "snippet": "sprite(\"${1:スプライト1}\").volume", + "description": "(スプライト1▼) の [音量▼]" + }, + "current_year": { + "snippet": "Time.now.year", + "description": "現在の [年▼]" + }, + "current_month": { + "snippet": "Time.now.month", + "description": "現在の [月▼]" + }, + "current_day": { + "snippet": "Time.now.day", + "description": "現在の [日▼]" + }, + "current_day_of_week": { + "snippet": "Time.now.date", + "description": "現在の [曜日▼]" + }, + "current_hour": { + "snippet": "Time.now.hour", + "description": "現在の [時▼]" + }, + "current_minute": { + "snippet": "Time.now.min", + "description": "現在の [分▼]" + }, + "current_second": { + "snippet": "Time.now.sec", + "description": "現在の [秒▼]" + }, + "days_since_2000": { + "snippet": "days_since_2000", + "description": "2000年からの日数" + }, + "user_name": { + "snippet": "user_name", + "description": "ユーザー名" + } +} diff --git a/src/containers/ruby-tab/smalrubot-s1-completer.js b/src/containers/ruby-tab/smalrubot-s1-completer.js deleted file mode 100644 index b6bf5735e4f..00000000000 --- a/src/containers/ruby-tab/smalrubot-s1-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class SmalrubotS1Completer extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default SmalrubotS1Completer; diff --git a/src/containers/ruby-tab/smalrubot-s1-snippets.json b/src/containers/ruby-tab/smalrubot-s1-snippets.json new file mode 100644 index 00000000000..5d826c14916 --- /dev/null +++ b/src/containers/ruby-tab/smalrubot-s1-snippets.json @@ -0,0 +1,6 @@ +{ + "smalrubot_s1.action": { + "snippet": "smalrubot_s1.action(\"${1:forward}\")", + "description": "[進める▼]" + } +} diff --git a/src/containers/ruby-tab/snippets-completer.js b/src/containers/ruby-tab/snippets-completer.js new file mode 100644 index 00000000000..689872fa6b2 --- /dev/null +++ b/src/containers/ruby-tab/snippets-completer.js @@ -0,0 +1,62 @@ +import BaseCompleter from './base-completer'; + +import MotionSnippets from './motion-snippets.json'; +import LooksSnippets from './looks-snippets.json'; +import SoundSnippets from './sound-snippets.json'; +import EventsSnippets from './events-snippets.json'; +import ControlSnippets from './control-snippets.json'; +import SensingSnippets from './sensing-snippets.json'; +import OperatorsSnippets from './operators-snippets.json'; +import VariablesSnippets from './variables-snippets.json'; + +import MusicSnippets from './music-snippets.json'; +import PenSnippets from './pen-snippets.json'; +import VideoSensingSnippets from './video-sensing-snippets.json'; +import TextToSpeechSnippets from './text-to-speech-snippets.json'; +import TranslateSnippets from './translate-snippets.json'; +import MicrobitSnippets from './microbit-snippets.json'; +import MeshSnippets from './mesh-snippets.json'; +import SmalrubotS1Snippets from './smalrubot-s1-snippets.json'; +import MicrobitMoreSnippets from './microbit-more-snippets.json'; + +class SnippetsCompleter extends BaseCompleter { + #completions = []; + + constructor() { + super(); + + const snippetsList = [ + MotionSnippets, + LooksSnippets, + SoundSnippets, + EventsSnippets, + ControlSnippets, + SensingSnippets, + OperatorsSnippets, + VariablesSnippets, + + MusicSnippets, + PenSnippets, + VideoSensingSnippets, + TextToSpeechSnippets, + TranslateSnippets, + MicrobitSnippets, + MeshSnippets, + SmalrubotS1Snippets, + MicrobitMoreSnippets + ]; + snippetsList.forEach(snippets => { + for (const [caption, item] of Object.entries(snippets)) { + item.caption = caption; + item.type = 'snippet'; + this.#completions.push(item); + } + }); + } + + getCompletions (editor, session, pos, prefix, callback) { + callback(null, this.#completions); + } +} + +export default SnippetsCompleter; diff --git a/src/containers/ruby-tab/sound-completer.js b/src/containers/ruby-tab/sound-completer.js deleted file mode 100644 index 0780e3282c9..00000000000 --- a/src/containers/ruby-tab/sound-completer.js +++ /dev/null @@ -1,49 +0,0 @@ -import BaseCompleter from './base-completer'; - -class SoundCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - { - value: 'play_until_done("ニャー")', - description: '終わるまでニャーの音を鳴らす' - }, - { - value: 'play("ニャー")', - description: 'ニャーの音を鳴らす' - }, - { - value: 'stop_all_sounds', - description: 'すべての音を止める' - }, - { - value: 'change_sound_effect_by("PITCH",10)', - description: 'ピッチの効果を10ずつ変える' - }, - { - value: 'set_sound_effect("PITCH", 100)', - description: 'ピッチの効果を100にする' - }, - { - value: 'clear_sound_effects', - description: '音の効果をなくす' - }, - { - value: 'self.volume += -10', - description: '音量を-10ずつ変える' - }, - { - value: 'self.volume =100', - description: '音量を100%にする' - }, - { - value: 'volume', - description: '音量' - } - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default SoundCompleter; diff --git a/src/containers/ruby-tab/sound-snippets.json b/src/containers/ruby-tab/sound-snippets.json new file mode 100644 index 00000000000..46167a727fa --- /dev/null +++ b/src/containers/ruby-tab/sound-snippets.json @@ -0,0 +1,38 @@ +{ + "play_until_done": { + "snippet": "play_until_done(\"${1:ニャー}\")", + "description": "終わるまで (ニャー▼) の音を鳴らす" + }, + "play": { + "snippet":"play(\"${1:ニャー}\")", + "description": "(ニャー▼) の音を鳴らす" + }, + "stop_all_sounds": { + "snippet": "stop_all_sounds", + "description": "すべての音を止める" + }, + "change_sound_effect_by": { + "snippet": "change_sound_effect_by(\"${1:pitch}\", ${2:10})", + "description": "[ピッチ▼] の効果を (10) ずつ変える" + }, + "set_sound_effect": { + "snippet": "set_sound_effect(\"${1:pitch}\", ${2:100})", + "description": "[ピッチ▼] の効果を (100) にする" + }, + "clear_sound_effects": { + "snippet": "clear_sound_effects", + "description": "音の効果をなくす" + }, + "volume+=": { + "snippet": "self.volume += ${1:-10}", + "description": "音量を (-10) ずつ変える" + }, + "volume=": { + "snippet": "self.volume = ${1:100}", + "description": "音量を (100) %にする" + }, + "volume": { + "snippet": "volume", + "description": "音量" + } +} diff --git a/src/containers/ruby-tab/text-to-speech-completer.js b/src/containers/ruby-tab/text-to-speech-completer.js deleted file mode 100644 index 05e6c13d9f1..00000000000 --- a/src/containers/ruby-tab/text-to-speech-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class TextToSpeechCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default TextToSpeechCompleter; diff --git a/src/containers/ruby-tab/text-to-speech-snippets.json b/src/containers/ruby-tab/text-to-speech-snippets.json new file mode 100644 index 00000000000..bd541bade55 --- /dev/null +++ b/src/containers/ruby-tab/text-to-speech-snippets.json @@ -0,0 +1,14 @@ +{ + "text2speech.speak": { + "snippet": "text2speech.speak(\"${1:こんにちは}\")", + "description": "(こんにちは) としゃべる" + }, + "text2speech.voice=": { + "snippet": "text2speech.voice = \"${1:alto}\"", + "description": "声を (アルト▼) にする" + }, + "text2speech.language=": { + "snippet": "text2speech.language = \"${1:ja}\"", + "description": "言語を (日本語▼) にする" + } +} diff --git a/src/containers/ruby-tab/translate-completer.js b/src/containers/ruby-tab/translate-completer.js deleted file mode 100644 index 8010cc7748c..00000000000 --- a/src/containers/ruby-tab/translate-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class TranslateCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default TranslateCompleter; diff --git a/src/containers/ruby-tab/translate-snippets.json b/src/containers/ruby-tab/translate-snippets.json new file mode 100644 index 00000000000..ce682fd0647 --- /dev/null +++ b/src/containers/ruby-tab/translate-snippets.json @@ -0,0 +1,10 @@ +{ + "translate.translate": { + "snippet": "translate(\"${1:こんにちは}\", \"${2:en}\")", + "description": "(こんにちは) を (英語▼) に翻訳する" + }, + "translate.language": { + "snippet": "language", + "description": "言語" + } +} diff --git a/src/containers/ruby-tab/variables-completer.js b/src/containers/ruby-tab/variables-completer.js deleted file mode 100644 index 5060e76ce21..00000000000 --- a/src/containers/ruby-tab/variables-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class VariablesCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default VariablesCompleter; diff --git a/src/containers/ruby-tab/variables-snippets.json b/src/containers/ruby-tab/variables-snippets.json new file mode 100644 index 00000000000..a3564a5790d --- /dev/null +++ b/src/containers/ruby-tab/variables-snippets.json @@ -0,0 +1,70 @@ +{ + "$": { + "snippet": "$${1:変数}", + "description": "変数" + }, + "$=": { + "snippet": "$${1:変数} = ${2:0}", + "description": "[変数▼] を (0) にする" + }, + "$+=": { + "snippet": "$${1:変数} += ${2:1}", + "description": "[変数▼] を (1) ずつ変える" + }, + "show_variable": { + "snippet": "show_variable(\"$${1:変数}\")", + "description": "変数 [変数▼] を表示する" + }, + "hide_variable": { + "snippet": "hide_variable(\"$${1:変数}\")", + "description": "変数 [変数▼] を隠す" + }, + "list.push": { + "snippet": "list(\"$${1:リスト}\").push(\"${2:なにか}\")", + "description": "(なにか) を [リスト▼] に追加する" + }, + "list.delete_at": { + "snippet": "list(\"$${1:リスト}\").delete_at(${2:1})", + "description": "[リスト▼] の (1) 番目を削除する" + }, + "list.clear": { + "snippet": "list(\"$${1:リスト}\").clear", + "description": "[リスト▼] のすべてを削除する" + }, + "list.insert": { + "snippet": "list(\"$${1:リスト}\").insert(${2:1}, \"${3:なにか}\")", + "description": "[リスト▼] の (1) 番目に (なにか) を挿入する" + }, + "list[]=": { + "snippet": "list(\"$${1:リスト}\")[${2:1}] = \"${3:なにか}\"", + "description": "[リスト▼] の (1) 番目を (なにか) で置き換える" + }, + "list": { + "snippet": "list(\"$${1:リスト}\")", + "description": "リスト" + }, + "list[]": { + "snippet": "list(\"$${1:リスト}\")[${2:1}]", + "description": "[リスト▼] の (1) 番目" + }, + "list.index": { + "snippet": "list(\"$${1:リスト}\").index(\"${2:なにか}\")", + "description": "[リスト▼] 中の (なにか) の場所" + }, + "list.length": { + "snippet": "list(\"$${1:リスト}\").length", + "description": "[リスト▼] の長さ" + }, + "list.include?": { + "snippet": "list(\"$${1:リスト}\").include?(\"${2:なにか}\")", + "description": "[リスト▼] に (なにか) が含まれる" + }, + "show_list": { + "snippet": "show_list(\"$${1:リスト}\")", + "description": "リスト [リスト▼] を表示する" + }, + "hide_list": { + "snippet": "hide_list(\"$${1:リスト}\")", + "description": "リスト [リスト▼] を隠す" + } +} diff --git a/src/containers/ruby-tab/video-sensing-completer.js b/src/containers/ruby-tab/video-sensing-completer.js deleted file mode 100644 index 3d25affff1a..00000000000 --- a/src/containers/ruby-tab/video-sensing-completer.js +++ /dev/null @@ -1,13 +0,0 @@ -import BaseCompleter from './base-completer'; - -class VideoSensingCompleter extends BaseCompleter { - getCompletions (editor, session, pos, prefix, callback) { - const words = [ - ]; - const completions = []; - words.forEach(w => completions.push(w)); - callback(null, completions); - } -} - -export default VideoSensingCompleter; diff --git a/src/containers/ruby-tab/video-sensing-snippets.json b/src/containers/ruby-tab/video-sensing-snippets.json new file mode 100644 index 00000000000..5784388e480 --- /dev/null +++ b/src/containers/ruby-tab/video-sensing-snippets.json @@ -0,0 +1,18 @@ +{ + "video_sensing.when_video_motion>": { + "snippet": "video_sensing.when_video_motion_greater_than(${1:10}) do\n${2}\nend\n", + "description": "ビデオモーション > (10) のとき" + }, + "video_sensing.video": { + "snippet": "video_sensing.video_on(\"${1:motion}\", \"${2:this sprite}\")", + "description": "(スプライト▼) のビデオの (モーション▼)" + }, + "video_sensing.turn_video": { + "snippet": "video_sensing.video_turn(\"${1:on}\")", + "description": "ビデオを (入▼) にする" + }, + "video_sensing.video_transparency=": { + "snippet": "video_sensing.video_transparency = ${1:50}", + "description": "ビデオの透明度を (50) にする" + } +} From f66227fe8422888a115c3eb20dc1ccc4df82c08b Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sun, 15 Oct 2023 21:50:19 +0900 Subject: [PATCH 13/18] style: eslint --- src/containers/ruby-tab/base-completer.js | 16 +++++++++------- src/containers/ruby-tab/snippets-completer.js | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/containers/ruby-tab/base-completer.js b/src/containers/ruby-tab/base-completer.js index 8c1631f42af..a1ac1ec4901 100644 --- a/src/containers/ruby-tab/base-completer.js +++ b/src/containers/ruby-tab/base-completer.js @@ -7,7 +7,7 @@ class BaseCompleter { if (!item.docHTML) { let description = item.description; let code; - if (item.type == 'snippet') { + if (item.type === 'snippet') { const snippet = this.#removeSnippetVarAroundCode(item.snippet); description = description || snippet; code = snippet; @@ -22,13 +22,15 @@ class BaseCompleter { } } - #escapeHTML (str) { - return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/ Date: Sun, 15 Oct 2023 22:10:50 +0900 Subject: [PATCH 14/18] feat: add looks snippets --- src/containers/ruby-tab/looks-snippets.json | 68 +++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/containers/ruby-tab/looks-snippets.json b/src/containers/ruby-tab/looks-snippets.json index 591e32228de..a1db636dcec 100644 --- a/src/containers/ruby-tab/looks-snippets.json +++ b/src/containers/ruby-tab/looks-snippets.json @@ -14,5 +14,73 @@ "think": { "snippet": "think(\"${1:うーん...}\")", "description": "(うーん...) と考える" + }, + "switch_costume": { + "snippet": "switch_costume(\"${1:コスチューム1}\")", + "description": "コスチュームを (コスチューム1▼) にする" + }, + "next_costume": { + "snippet": "next_costume", + "description": "次のコスチュームにする" + }, + "switch_backdrop": { + "snippet": "switch_backdrop(\"${1:背景1}\")", + "description": "背景を (背景1▼) にする" + }, + "next_backdrop": { + "snippet": "next_backdrop", + "description": "次の背景にする" + }, + "size+=": { + "snippet": "self.size += ${1:10}", + "description": "大きさを (10) ずつ変える" + }, + "size=": { + "snippet": "self.size = ${1:100}", + "description": "大きさを (100) %にする" + }, + "change_effect_by": { + "snippet": "change_effect_by(\"${1:color}\", ${2:25})", + "description": "[色▼] の効果を (25) ずつかえる" + }, + "set_effect": { + "snippet": "set_effect(\"${1:color}\", ${2:0})", + "description": "[色▼] の効果を (0) にする" + }, + "clear_graphic_effects": { + "snippet": "clear_graphic_effects", + "description": "画像効果をなくす" + }, + "show": { + "snippet": "show", + "description": "表示する" + }, + "hide": { + "snippet": "hide", + "description": "隠す" + }, + "go_layers": { + "snippet": "go_layers(${1:1}, \"${2:forward}\")", + "description": "(1) 層 [手前に出す▼]" + }, + "costume_number": { + "snippet": "costume_number", + "description": "コスチュームの [番号▼]" + }, + "costume_name": { + "snippet": "costume_name", + "description": "コスチュームの [名前▼]" + }, + "backdrop_number": { + "snippet": "backdrop_number", + "description": "背景の [番号▼]" + }, + "backdrop_name": { + "snippet": "backdrop_name", + "description": "背景の [名前▼]" + }, + "size": { + "snippet": "size", + "description": "大きさ" } } From c3be9f2718e5dbb2646640ea90e4cf152e5a1a48 Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sun, 15 Oct 2023 22:58:50 +0900 Subject: [PATCH 15/18] feat: pen --- src/containers/ruby-tab/pen-snippets.json | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/containers/ruby-tab/pen-snippets.json b/src/containers/ruby-tab/pen-snippets.json index cf96c0df3ac..d3acd1413ba 100644 --- a/src/containers/ruby-tab/pen-snippets.json +++ b/src/containers/ruby-tab/pen-snippets.json @@ -2,5 +2,61 @@ "pen.clear": { "snippet": "pen_clear", "description": "全部消す" + }, + "pen.stamp": { + "snippet": "pen_stamp", + "description": "スタンプ" + }, + "pen.down": { + "snippet": "pen_down", + "description": "ペンを下ろす" + }, + "pen.up": { + "snippet": "pen_up", + "description": "ペンを上げる" + }, + "pen.color=#": { + "snippet": "self.pen_color = \"#${1:7a2d74}\"", + "description": "ペンの色を (#7a2d74) にする" + }, + "pen.color+=": { + "snippet": "self.pen_color += ${1:10}", + "description": "ペンの [色▼] を (10) ずつ変える" + }, + "pen.saturation+=": { + "snippet": "self.pen_saturation += ${1:10}", + "description": "ペンの [鮮やかさ▼] を (10) ずつ変える" + }, + "pen.brightness+=": { + "snippet": "self.pen_brightness += ${1:10}", + "description": "ペンの [明るさ▼] を (10) ずつ変える" + }, + "pen.transparency+=": { + "snippet": "self.pen_transparency += ${1:10}", + "description": "ペンの [透明度▼] を (10) ずつ変える" + }, + "pen.color=": { + "snippet": "self.pen_color = ${1:50}", + "description": "ペンの [色▼] を (50) にする" + }, + "pen.saturation=": { + "snippet": "self.pen_saturation = ${1:50}", + "description": "ペンの [鮮やかさ▼] を (50) にする" + }, + "pen.brightness=": { + "snippet": "self.pen_brightness = ${1:50}", + "description": "ペンの [明るさ▼] を (50) にする" + }, + "pen.transparency=": { + "snippet": "self.pen_transparency = ${1:50}", + "description": "ペンの [透明度▼] を (50) にする" + }, + "pen.size+=": { + "snippet": "self.pen_size += ${1:1}", + "description": "ペンの太さを (1) ずつ変える" + }, + "pen.size=": { + "snippet": "self.pen_size = ${1:1}", + "description": "ペンの太さを (1) にする" } } From 1086aa963e41bb97b938a814dd82dd454a8589e3 Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sun, 15 Oct 2023 22:58:57 +0900 Subject: [PATCH 16/18] feat: music --- src/containers/ruby-tab/music-snippets.json | 180 ++++++++++++++++++++ 1 file changed, 180 insertions(+) diff --git a/src/containers/ruby-tab/music-snippets.json b/src/containers/ruby-tab/music-snippets.json index c46e0623136..7873796d0f2 100644 --- a/src/containers/ruby-tab/music-snippets.json +++ b/src/containers/ruby-tab/music-snippets.json @@ -2,5 +2,185 @@ "music.play_drum": { "snippet": "play_drum(drum: ${1:1}, beats: ${2:0.25})", "description": "((1)スネアドラム▼) のドラムを (0.25) 拍鳴らす" + }, + "music.d-snare": { + "snippet": "1", + "description": "(1) スネアドラム" + }, + "music.d-bass": { + "snippet": "2", + "description": "(2) バスドラム" + }, + "music.d-side-stick": { + "snippet": "3", + "description": "(3) サイドスティック" + }, + "music.d-crash-cymbal": { + "snippet": "4", + "description": "(4) クラッシュシンバル" + }, + "music.d-open-hihat": { + "snippet": "5", + "description": "(5) オープンハイハット" + }, + "music.d-closed-hihat": { + "snippet": "6", + "description": "(6) クローズハイハット" + }, + "music.d-tambourine": { + "snippet": "7", + "description": "(7) タンバリン" + }, + "music.d-hand-clap": { + "snippet": "8", + "description": "(8) 手拍子" + }, + "music.d-claves": { + "snippet": "9", + "description": "(9) クラーベ" + }, + "music.d-wood-block": { + "snippet": "10", + "description": "(10) ウッドブロック" + }, + "music.d-cowbell": { + "snippet": "11", + "description": "(11) カウベル" + }, + "music.d-triangle": { + "snippet": "12", + "description": "(12) トライアングル" + }, + "music.d-bongo": { + "snippet": "13", + "description": "(13) ボンゴ" + }, + "music.d-conga": { + "snippet": "14", + "description": "(14) コンガ" + }, + "music.d-cabasa": { + "snippet": "15", + "description": "(15) カバサ" + }, + "music.d-guiro": { + "snippet": "16", + "description": "(16) ギロ" + }, + "music.d-vibraslap": { + "snippet": "17", + "description": "(17) ビブラスラップ" + }, + "music.d-cuica": { + "snippet": "18", + "description": "(18) クイーカ" + }, + "music.rest": { + "snippet": "rest(${1:0.25})", + "description": "(0.25) 拍休む" + }, + "music.play_note": { + "snippet": "play_note(note: ${1:60}, beats: ${2:0.25})", + "description": "(60) の音符を (0.25) 拍鳴らす" + }, + "music.instrument=": { + "snippet": "self.instrument = ${1:1}", + "description": "楽器を ((1)ピアノ▼) にする" + }, + "music.i-piano": { + "snippet": "1", + "description": "(1) ピアノ" + }, + "music.i-electric-piano": { + "snippet": "2", + "description": "(2) 電子ピアノ" + }, + "music.i-organ": { + "snippet": "3", + "description": "(3) オルガン" + }, + "music.i-guitar": { + "snippet": "4", + "description": "(4) ギター" + }, + "music.i-electric-guitar": { + "snippet": "5", + "description": "(5) エレキギター" + }, + "music.i-bass": { + "snippet": "6", + "description": "(6) ベース" + }, + "music.i-pizzicato": { + "snippet": "7", + "description": "(7) ピチカート" + }, + "music.i-cello": { + "snippet": "8", + "description": "(8) チェロ" + }, + "music.i-trombone": { + "snippet": "9", + "description": "(9) トロンボーン" + }, + "music.i-clarinet": { + "snippet": "10", + "description": "(10) クラリネット" + }, + "music.i-saxophone": { + "snippet": "11", + "description": "(11) サクソフォン" + }, + "music.i-flute": { + "snippet": "12", + "description": "(12) フルート" + }, + "music.i-wooden-flute": { + "snippet": "13", + "description": "(13) 木管フルート" + }, + "music.i-bassoon": { + "snippet": "14", + "description": "(14) バスーン" + }, + "music.i-choir": { + "snippet": "15", + "description": "(15) 合唱団" + }, + "music.i-vibraphone": { + "snippet": "16", + "description": "(16) ビブラフォン" + }, + "music.i-music-box": { + "snippet": "17", + "description": "(17) ミュージックボックス" + }, + "music.i-steel-drum": { + "snippet": "18", + "description": "(18) スチールドラム" + }, + "music.i-marimba": { + "snippet": "19", + "description": "(19) マリンバ" + }, + "music.i-synth-lead": { + "snippet": "20", + "description": "(20) シンセリード" + }, + "music.i-synth-pad": { + "snippet": "21", + "description": "(21) シンセパッド" + }, + "music.tempo=": { + "snippet": "self.tempo = ${1:60}", + "description": "テンポを (60) にする" + }, + "music.tempo+=": { + "snippet": "self.tempo += ${1:20}", + "description": "テンポを (20) ずつ変える" + }, + "music.tempo": { + "snippet": "tempo", + "description": "テンポ" } } From bbf46c67d95f86bb18892fbdc01a7ba811c74630 Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sun, 15 Oct 2023 23:13:51 +0900 Subject: [PATCH 17/18] feat: smalrubot-s1 --- .../ruby-tab/smalrubot-s1-snippets.json | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/containers/ruby-tab/smalrubot-s1-snippets.json b/src/containers/ruby-tab/smalrubot-s1-snippets.json index 5d826c14916..d25ef9774d6 100644 --- a/src/containers/ruby-tab/smalrubot-s1-snippets.json +++ b/src/containers/ruby-tab/smalrubot-s1-snippets.json @@ -2,5 +2,65 @@ "smalrubot_s1.action": { "snippet": "smalrubot_s1.action(\"${1:forward}\")", "description": "[進める▼]" + }, + "smalrubot_s1.a-forward": { + "snippet": "forward", + "description": "進める" + }, + "smalrubot_s1.a-backward": { + "snippet": "backward", + "description": "バックさせる" + }, + "smalrubot_s1.a-turn-left": { + "snippet": "left", + "description": "左に曲げる" + }, + "smalrubot_s1.a-turn-right": { + "snippet": "right", + "description": "右に曲げる" + }, + "smalrubot_s1.a-stop": { + "snippet": "stop", + "description": "止める" + }, + "smalrubot_s1.action-in": { + "snippet": "smalrubot_s1.action(\"${1:forward}\", ${2:0.5})", + "description": "(0.5) 秒 [進める▼]" + }, + "smalrubot_s1.bend_arm": { + "snippet": "smalrubot_s1.bend_arm(${1:90}, ${2:1})", + "description": "(1) 秒でアームを (90) 度に曲げる" + }, + "smalrubot_s1.sensor_value": { + "snippet": "smalrubot_s1.sensor_value(\"${1:left}\")", + "description": "[左▼] のセンサー" + }, + "smalrubot_s1.d-left": { + "snippet": "left", + "description": "左" + }, + "smalrubot_s1.d-right": { + "snippet": "right", + "description": "右" + }, + "smalrubot_s1.led_on": { + "snippet": "smalrubot_s1.led(\"${1:left}\", true)", + "description": "[左▼] のLEDをオンにする" + }, + "smalrubot_s1.led_off": { + "snippet": "smalrubot_s1.led(\"${1:left}\", false)", + "description": "[左▼] のLEDをオフにする" + }, + "smalrubot_s1.get_motor_speed": { + "snippet": "smalrubot_s1.get_motor_speed(\"${1:left}\")", + "description": "[左▼] DCモーターの速度 (%)" + }, + "smalrubot_s1.set_motor_speed": { + "snippet": "smalrubot_s1.set_motor_speed(\"${1:left}\", ${1:50})", + "description": "[左▼] DCモーターの速度を (50) (%) にする" + }, + "smalrubot_s1.arm_calibration=": { + "snippet": "smalrubot_s1.arm_calibration = ${1:0}", + "description": "アームを (0) 度調整する" } } From 183a6f6111d3ca2fd325f95aeee9145abc2735ee Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Sun, 15 Oct 2023 23:43:13 +0900 Subject: [PATCH 18/18] feat: procedure --- src/containers/ruby-tab/procedure-snippets.json | 6 ++++++ src/containers/ruby-tab/snippets-completer.js | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 src/containers/ruby-tab/procedure-snippets.json diff --git a/src/containers/ruby-tab/procedure-snippets.json b/src/containers/ruby-tab/procedure-snippets.json new file mode 100644 index 00000000000..edcff57685d --- /dev/null +++ b/src/containers/ruby-tab/procedure-snippets.json @@ -0,0 +1,6 @@ +{ + "def": { + "snippet": "def self.${1:ブロック名}(${2:number_or_text})\n${3}\nend\n", + "description": "定義 ブロック名 (number_or_text)" + } +} diff --git a/src/containers/ruby-tab/snippets-completer.js b/src/containers/ruby-tab/snippets-completer.js index 603dce6d93b..4df893ea11e 100644 --- a/src/containers/ruby-tab/snippets-completer.js +++ b/src/containers/ruby-tab/snippets-completer.js @@ -8,6 +8,7 @@ import ControlSnippets from './control-snippets.json'; import SensingSnippets from './sensing-snippets.json'; import OperatorsSnippets from './operators-snippets.json'; import VariablesSnippets from './variables-snippets.json'; +import ProcedureSnippets from './procedure-snippets.json'; import MusicSnippets from './music-snippets.json'; import PenSnippets from './pen-snippets.json'; @@ -34,6 +35,7 @@ class SnippetsCompleter extends BaseCompleter { SensingSnippets, OperatorsSnippets, VariablesSnippets, + ProcedureSnippets, MusicSnippets, PenSnippets,