MCPcopy
hub / github.com/micro-editor/micro / parseRules

Function parseRules

pkg/highlight/parser.go:339–393  ·  view source on GitHub ↗
(input []any, curRegion *region)

Source from the content-addressed store, hash-verified

337}
338
339func parseRules(input []any, curRegion *region) (ru *rules, err error) {
340 defer func() {
341 if r := recover(); r != nil {
342 var ok bool
343 err, ok = r.(error)
344 if !ok {
345 err = fmt.Errorf("pkg: %v", r)
346 }
347 }
348 }()
349 ru = new(rules)
350
351 for _, v := range input {
352 rule := v.(map[any]any)
353 for k, val := range rule {
354 group := k
355
356 switch object := val.(type) {
357 case string:
358 if object == "" {
359 return nil, fmt.Errorf("Empty rule %s", k)
360 }
361
362 if k == "include" {
363 ru.includes = append(ru.includes, object)
364 } else {
365 // Pattern
366 r, err := regexp.Compile(object)
367 if err != nil {
368 return nil, err
369 }
370
371 groupStr := group.(string)
372 if _, ok := Groups[groupStr]; !ok {
373 numGroups++
374 Groups[groupStr] = numGroups
375 }
376 groupNum := Groups[groupStr]
377 ru.patterns = append(ru.patterns, &pattern{groupNum, r})
378 }
379 case map[any]any:
380 // region
381 region, err := parseRegion(group.(string), object, curRegion)
382 if err != nil {
383 return nil, err
384 }
385 ru.regions = append(ru.regions, region)
386 default:
387 return nil, fmt.Errorf("Bad type %T", object)
388 }
389 }
390 }
391
392 return ru, nil
393}
394
395func parseRegion(group string, regionInfo map[any]any, prevRegion *region) (r *region, err error) {
396 defer func() {

Callers 2

ParseDefFunction · 0.85
parseRegionFunction · 0.85

Calls 1

parseRegionFunction · 0.85

Tested by

no test coverage detected