Skip to content

Commit

Permalink
Allow overwriting TextEditingValue with folded blocks even with colla…
Browse files Browse the repository at this point in the history
…psed selection (#232) (#233)

* Allow overwriting TextEditingValue with folded blocks even with collapsed selection (#232)

* Fix an analyzer issue (#232)
  • Loading branch information
alexeyinkin authored Apr 27, 2023
1 parent cbf39b2 commit c58695d
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 3 deletions.
3 changes: 3 additions & 0 deletions example/lib/03.change_language_theme/constants.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import 'package:highlight/languages/dart.dart';
import 'package:highlight/languages/go.dart';
import 'package:highlight/languages/java.dart';
import 'package:highlight/languages/php.dart';
import 'package:highlight/languages/python.dart';
import 'package:highlight/languages/scala.dart';

final builtinLanguages = {
'dart': dart,
'go': go,
'java': java,
'php': php,
'python': python,
'scala': scala,
};
Expand All @@ -16,6 +18,7 @@ const languageList = <String>[
'dart',
'go',
'java',
'php',
'python',
'scala',
];
Expand Down
7 changes: 4 additions & 3 deletions lib/src/code/code.dart
Original file line number Diff line number Diff line change
Expand Up @@ -381,10 +381,11 @@ class Code {
// If there is any folded block that is going to be removed
// because of `backspace` or `delete`, return unchanged text.
if (oldSelection.isCollapsed &&
visibleAfter.text.length == visibleText.length - 1 &&
foldedBlocks.any(
(element) =>
element.lastLine >= firstChangedLine &&
element.lastLine <= lastChangedLine,
(block) =>
block.lastLine >= firstChangedLine &&
block.lastLine <= lastChangedLine,
)) {
return CodeEditResult(
fullTextAfter: text,
Expand Down
83 changes: 83 additions & 0 deletions test/issues/issue_232_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter_code_editor/flutter_code_editor.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:highlight/languages/java.dart';

const _fullText = '''
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.beam.learning.katas.commontransforms.filter.filter;
import org.apache.beam.learning.katas.util.Log;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.Create;
import org.apache.beam.sdk.transforms.Filter;
import org.apache.beam.sdk.values.PCollection;
public class Task {
public static void main(String[] args) {
PipelineOptions options = PipelineOptionsFactory.fromArgs(args).create();
Pipeline pipeline = Pipeline.create(options);
PCollection<Integer> numbers =
pipeline.apply(Create.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
PCollection<Integer> output = applyTransform(numbers);
output.apply(Log.ofElements());
pipeline.run();
}
static PCollection<Integer> applyTransform(PCollection<Integer> input) {
return input.apply(Filter.by(number -> number % 2 == 0));
}
}''';

const _newValue = TextEditingValue(
text: '''
public class MyClass {
public static void main(String[] args) {
System.out.print("OK");
}
}
''',
selection: TextSelection.collapsed(offset: 100),
);

void main() {
test('Issue 232', () {
final controller = CodeController(
language: java,
);

controller.fullText = _fullText;
controller.foldCommentAtLineZero();
controller.foldImports();

controller.value = _newValue;

expect(controller.value, _newValue);
});
}

0 comments on commit c58695d

Please sign in to comment.