Skip to content

Commit b7d6346

Browse files
authored
Merge pull request #343 from smalruby/microbit-more-completer
feat: microbit more completion
2 parents f8f8621 + 6a60e82 commit b7d6346

File tree

9 files changed

+160
-26
lines changed

9 files changed

+160
-26
lines changed

src/containers/ruby-tab/control-snippets.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,27 @@
44
"description": "(1) 秒待つ"
55
},
66
"times": {
7-
"snippet": "${1:10}.times do\n${2}\nend\n",
7+
"snippet": "${1:10}.times do\n\t${2}\nend",
88
"description": "(10) 回繰り返す"
99
},
1010
"loop": {
11-
"snippet": "loop do\n${1}\nend\n",
11+
"snippet": "loop do\n\t${1}\nend",
1212
"description": "ずっと"
1313
},
1414
"if": {
15-
"snippet": "if ${1:false}\n${2}\nend\n",
15+
"snippet": "if ${1:false}\n\t${2}\nend",
1616
"description": "もし < > なら"
1717
},
1818
"if-else": {
19-
"snippet": "if ${1:false}\n${2}\nelse\n${3}\nend\n",
19+
"snippet": "if ${1:false}\n\t${2}\nelse\n\t${3}\nend",
2020
"description": "もし < > なら、でなければ"
2121
},
2222
"wait-until": {
2323
"snippet": "wait until ${1:false}",
2424
"description": "< > まで待つ"
2525
},
2626
"until": {
27-
"snippet": "until ${1:false}\n${2}\nend\n",
27+
"snippet": "until ${1:false}\n\t${2}\nend",
2828
"description": "< > まで繰り返す"
2929
},
3030
"stop-all": {
@@ -40,7 +40,7 @@
4040
"description": "[スプライトの他のスクリプトを止める▼]"
4141
},
4242
"when_start_as_a_clone": {
43-
"snippet": "when_start_as_a_clone do\n${1}\nend\n",
43+
"snippet": "when_start_as_a_clone do\n\t${1}\nend",
4444
"description": "クローンされたとき"
4545
},
4646
"create_clone": {

src/containers/ruby-tab/events-snippets.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
{
22
"when_flag_clicked": {
3-
"snippet": "when_flag_clicked do\n${1}\nend\n",
3+
"snippet": "when_flag_clicked do\n\t${1}\nend",
44
"description": "旗が押されたとき"
55
},
66
"when_key_pressed": {
7-
"snippet": "when_key_pressed(\"${1:space}\") do\n${2}\nend\n",
7+
"snippet": "when_key_pressed(\"${1:space}\") do\n\t${2}\nend",
88
"description": "[スペース▼] キーが押されたとき"
99
},
1010
"when_clicked": {
11-
"snippet": "when_clicked do\n${1}\nend\n",
11+
"snippet": "when_clicked do\n\t${1}\nend",
1212
"description": "このスプライトが押されたとき"
1313
},
1414
"when_backdrop_switches": {
15-
"snippet": "when_backdrop_switches(\"${1:背景1}\") do\n${2}\nend\n",
15+
"snippet": "when_backdrop_switches(\"${1:背景1}\") do\n\t${2}\nend",
1616
"description": "背景が [背景1▼] になったとき"
1717
},
1818
"when_greater_than": {
19-
"snippet": "when_greater_than(\"${1:loudness}\", ${2:10}) do\n${3}\nend\n",
19+
"snippet": "when_greater_than(\"${1:loudness}\", ${2:10}) do\n\t${3}\nend",
2020
"description": "[音量▼] > (10) のとき"
2121
},
2222
"when_receive": {
23-
"snippet": "when_receive(\"${1:メッセージ1}\") do\n${2}\nend\n",
23+
"snippet": "when_receive(\"${1:メッセージ1}\") do\n\t${2}\nend",
2424
"description": "[メッセージ1▼] を受け取ったとき"
2525
},
2626
"broadcast": {
Lines changed: 121 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,126 @@
11
{
2+
"microbit_more.when_microbit": {
3+
"snippet": "microbit_more.when_microbit(\"${1:connected}\") do\n\t${2}\nend",
4+
"description": "micro:bit と [つながった▼] とき"
5+
},
26
"microbit_more.when_button_is": {
3-
"snippet": "microbit_more.when_button_is(\"${1:A}\", \"${2:down}\") do\n${3}\nend\n",
7+
"snippet": "microbit_more.when_button_is(\"${1:A}\", \"${2:down}\") do\n\t${3}\nend",
48
"description": "ボタン [A▼] が [押された▼] とき"
9+
},
10+
"microbit_more.button_pressed?": {
11+
"snippet": "microbit_more.button_pressed?(\"${1:A}\")",
12+
"description": "ボタン [A▼] が押されている"
13+
},
14+
"microbit_more.when_pin_is": {
15+
"snippet": "microbit_more.when_pin_is(\"${1:LOGO}\", \"${2:touched}\") do\n\t${3}\nend",
16+
"description": "ピン [ロゴ▼] が [タッチされた▼] とき"
17+
},
18+
"microbit_more.pin_is_touched?": {
19+
"snippet": "microbit_more.pin_is_touched?(\"${1:LOGO}\")",
20+
"description": "ピン [ログ▼] がタッチされている"
21+
},
22+
"microbit_more.when": {
23+
"snippet": "microbit_more.when(\"${1:shake}\") do\n\t${2}\nend",
24+
"description": "[ゆさぶられた▼] とき"
25+
},
26+
"microbit_more.display_pattern": {
27+
"snippet": "microbit_more.display_pattern(\n\t\"${1:.1.1.}\",\n\t\"${2:1.1.1}\",\n\t\"${3:1...1}\",\n\t\"${4:.1.1.}\",\n\t\"${5:..1..}\"\n)",
28+
"description": "パターン (♡▼) を表示する"
29+
},
30+
"microbit_more.display_text_delay": {
31+
"snippet": "microbit_more.display_text_delay(\"${1:Hello!}\", ${2:120})",
32+
"description": "文字 (Hello!) を (120) ミリ秒間隔で流す"
33+
},
34+
"microbit_more.clear_display": {
35+
"snippet": "microbit_more.clear_display",
36+
"description": "画面を消す"
37+
},
38+
"microbit_more.light_intensity": {
39+
"snippet": "microbit_more.light_intensity",
40+
"description": "明るさ"
41+
},
42+
"microbit_more.temperature": {
43+
"snippet": "microbit_more.temperature",
44+
"description": "温度"
45+
},
46+
"microbit_more.angle_with_north": {
47+
"snippet": "microbit_more.angle_with_north",
48+
"description": "北からの角度"
49+
},
50+
"microbit_more.pitch": {
51+
"snippet": "microbit_more.pitch",
52+
"description": "ピッチ"
53+
},
54+
"microbit_more.roll": {
55+
"snippet": "microbit_more.roll",
56+
"description": "ロール"
57+
},
58+
"microbit_more.sound_level": {
59+
"snippet": "microbit_more.sound_level",
60+
"description": "音の大きさ"
61+
},
62+
"microbit_more.magnetic_force": {
63+
"snippet": "microbit_more.magnetic_force(\"${1:absolute}\")",
64+
"description": "磁力 [大きさ▼]"
65+
},
66+
"microbit_more.acceleration": {
67+
"snippet": "microbit_more.acceleration(\"${1:x}\")",
68+
"description": "加速度 [x▼]"
69+
},
70+
"microbit_more.analog_value": {
71+
"snippet": "microbit_more.analog_value(\"${1:P0}\")",
72+
"description": "ピン [P0▼] のアナログレベル"
73+
},
74+
"microbit_more.set_pin_to_input_pull": {
75+
"snippet": "microbit_more.set_pin_to_input_pull(\"P0\", \"up\")",
76+
"description": "ピン [P0▼] を [プルアップ▼] 入力にする"
77+
},
78+
"microbit_more.is_pin_high?": {
79+
"snippet": "microbit_more.is_pin_high?(\"${1:P0}\")",
80+
"description": "ピン [P0▼] がハイである"
81+
},
82+
"microbit_more.set_digital": {
83+
"snippet": "microbit_more.set_digital(\"${1:P0}\", \"${2:Low}\")",
84+
"description": "ピン [P0▼] をデジタル出力 [ロー▼] にする"
85+
},
86+
"microbit_more.set_analog": {
87+
"snippet": "microbit_more.set_analog(\"${1:P0}\", ${2:0})",
88+
"description": "ピン [P0▼] をアナログ出力 [LEVEL] %にする"
89+
},
90+
"microbit_more.set_servo": {
91+
"snippet": "microbit_more.set_servo(\"${1:P0}\", ${2:0})",
92+
"description": "ピン [P0▼] をサーボ (0) 度にする"
93+
},
94+
"microbit_more.play_tone": {
95+
"snippet": "microbit_more.play_tone(${1:440}, ${2:100})",
96+
"description": "(440) Hzの音を (100) %の大きさで鳴らす"
97+
},
98+
"microbit_more.stop_tone": {
99+
"snippet": "microbit_more.stop_tone",
100+
"description": "音を止める"
101+
},
102+
"microbit_more.listen_event_on": {
103+
"snippet": "microbit_more.listen_event_on(\"${1:none}\", \"${2:P0}\")",
104+
"description": "ピン [P0▼] の [イベントを受けない▼]"
105+
},
106+
"microbit_more.when_catch_at_pin": {
107+
"snippet": "microbit_more.when_catch_at_pin(\"${1:low pulse}\", \"${2:P0}\") do\n\t${3}\nend",
108+
"description": "ピン [P0▼] で [ローパルス▼] イベントが起きたとき"
109+
},
110+
"microbit_more.value_of": {
111+
"snippet": "microbit_more.value_of(\"${1:low pulse}\", \"${2:P0}\")",
112+
"description": "ピン [P0▼] の [ローパルスの期間▼]"
113+
},
114+
"microbit_more.when_data_received_from_microbit": {
115+
"snippet": "microbit_more.when_data_received_from_microbit(\"${1:label-01}\") do\n\t${2}\nend",
116+
"description": "micro:bit からラベル (label-01) のデータを受け取ったとき"
117+
},
118+
"microbit_more.data": {
119+
"snippet": "microbit_more.data[\"${1:label-01}\"]",
120+
"description": "ラベル (label-01) のデータ"
121+
},
122+
"microbit_more.send_data_to_microbit": {
123+
"snippet": "microbit_more.send_data_to_microbit(\"${1:data}\", \"${2:label-01}\")",
124+
"description": "micro:bit へデータ (data) にラベル (label-01) を付けて送る"
5125
}
6126
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
{
22
"microbit.when_button_pressed": {
3-
"snippet": "microbit.when_button_pressed(\"${1:A}\") do\n${2}\nend\n",
3+
"snippet": "microbit.when_button_pressed(\"${1:A}\") do\n\t${2}\nend",
44
"description": "ボタン (A▼) が押されたとき"
55
},
66
"microbit.button_pressed?": {
77
"snippet": "microbit.button_pressed?(\"${1:A}\")",
88
"description": "ボタン (A▼) が押された"
99
},
1010
"microbit.when": {
11-
"snippet": "microbit.when(\"${1:moved}\") do\n${2}\nend\n",
11+
"snippet": "microbit.when(\"${1:moved}\") do\n\t${2}\nend",
1212
"description": "(動いた▼) とき"
1313
},
1414
"microbit.display_text": {
1515
"snippet": "microbit.display_text(\"${1:こんにちは!}\")",
1616
"description": "(こんにちは!) を表示する"
1717
},
1818
"microbit.display": {
19-
"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",
19+
"snippet": "microbit.display(\n \"${1:.1.1.}\",\n \"${2:1.1.1}\",\n \"${3:1...1}\",\n \"${4:.1.1.}\",\n \"${5:..1..}\"\n)",
2020
"description": "(♡▼) を表示する"
2121
},
2222
"microbit.when_tilted": {
23-
"snippet": "microbit.when_tilted(\"${1:any}\") do\n${2}\nend\n",
23+
"snippet": "microbit.when_tilted(\"${1:any}\") do\n\t${2}\nend",
2424
"description": "(どれかの向き▼) に傾いたとき"
2525
},
2626
"microbit.tilted?": {
@@ -32,7 +32,7 @@
3232
"description": "(前▼) 方向の傾き"
3333
},
3434
"microbit.when_pin_connected": {
35-
"snippet": "microbit.when_pin_connected(${1:0}) do\n${2}\nend\n",
35+
"snippet": "microbit.when_pin_connected(${1:0}) do\n\t${2}\nend",
3636
"description": "ピン (0▼) がつながったとき"
3737
}
3838
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"def": {
3-
"snippet": "def self.${1:ブロック名}(${2:number_or_text})\n${3}\nend\n",
3+
"snippet": "def self.${1:ブロック名}(${2:number_or_text})\n\t${3}\nend",
44
"description": "定義 ブロック名 (number_or_text)"
55
}
66
}

src/containers/ruby-tab/video-sensing-snippets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"video_sensing.when_video_motion>": {
3-
"snippet": "video_sensing.when_video_motion_greater_than(${1:10}) do\n${2}\nend\n",
3+
"snippet": "video_sensing.when_video_motion_greater_than(${1:10}) do\n\t${2}\nend",
44
"description": "ビデオモーション > (10) のとき"
55
},
66
"video_sensing.video": {

src/lib/ruby-generator/microbit_more.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,9 @@ export default function (Generator) {
110110
return ['microbit_more.sound_level', Generator.ORDER_FUNCTION_CALL];
111111
};
112112

113-
Generator.microbitMore_getMagneticForce = function () {
114-
return ['microbit_more.magnetic_force', Generator.ORDER_FUNCTION_CALL];
113+
Generator.microbitMore_getMagneticForce = function (block) {
114+
const axis = Generator.quote_(Generator.getFieldValue(block, 'AXIS', 'absolute'));
115+
return [`microbit_more.magnetic_force(${axis})`, Generator.ORDER_FUNCTION_CALL];
115116
};
116117

117118
Generator.microbitMore_getAcceleration = function (block) {

src/lib/ruby-to-blocks-converter/microbit_more.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,10 +311,21 @@ const MicrobitMoreConverter = {
311311
return converter.changeRubyExpressionBlock(receiver, 'microbitMore_getSoundLevel', 'value');
312312
});
313313

314-
converter.registerCallMethod(MicrobitMore, 'magnetic_force', 0, params => {
315-
const {receiver} = params;
314+
converter.registerCallMethod(MicrobitMore, 'magnetic_force', 1, params => {
315+
const {receiver, args} = params;
316316

317-
return converter.changeRubyExpressionBlock(receiver, 'microbitMore_getMagneticForce', 'value');
317+
if (converter.isString(args[0])) {
318+
const index = AccelerationMenu.indexOf(args[0].toString().toLowerCase());
319+
if (index < 0) return null;
320+
321+
args[0] = new Primitive('str', AccelerationMenu[index], args[0].node);
322+
} else {
323+
return null;
324+
}
325+
326+
const block = converter.changeRubyExpressionBlock(receiver, 'microbitMore_getMagneticForce', 'value');
327+
converter.addField(block, 'AXIS', args[0]);
328+
return block;
318329
});
319330

320331
converter.registerCallMethod(MicrobitMore, 'acceleration', 1, params => {

test/integration/ruby-tab/extension_microbit_more.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ describe('Ruby Tab: Microbit More v2 extension blocks', () => {
9191
9292
microbit_more.sound_level
9393
94-
microbit_more.magnetic_force
94+
microbit_more.magnetic_force("absolute")
95+
96+
microbit_more.magnetic_force("x")
9597
9698
microbit_more.acceleration("x")
9799

0 commit comments

Comments
 (0)