phcode-dev / phoenix

Phoenix is a modern open-source Code Editor for the web, built for the browser.
https://phcode.io
GNU Affero General Public License v3.0
1.78k stars 124 forks source link

feat: auto tab spacing detection #1806

Closed abose closed 3 months ago

abose commented 3 months ago

Detect Indents automatically based on current file

This will be the default mode. This can be toggled from the status bar by using the fixed/Auto toggle as shown below.

image image

features

  1. The auto detcted indents of each file can be overriden by manually entering the spacing and tab config as usual in the status bar. Those details will be persited for that file across reboots.
  2. To recompute the tab spacing config for a file, just click on the auto toggle in status bar twice. (to change mode to fixed and back to auto will recompute the spacing for the current file). Not entirely intuitive, but should be a very rare use case and didnt wanted to complicate the ui with more options and dropdows like in other editors.
  3. changing to fixed mode will set to fixed spaic across the system.
  4. There is also a json preference available to toggle this setting: "autoTabSpaces" : true - to enable

How it works

We use a modified version of https://www.npmjs.com/package/detect-indent . On creating a new editor, we scan the first 700 lines of text to determine the most probable indentation for the current editor.

700 lines was selected as it should be large enough to account for file comment headers if any and then we performance analysis and it takes <0.1 ms in most cases to scan 700 lines. Further, we modified the lib to directly use our editor APIs to get lines instead of getting text from the edtor as a whole and then splitting lines to improve perfomance.

The spacing computed for the file is cached temporarily for the current session and will be reused to reduce file switch times.

phoenixide commented 3 months ago

Thank You for making this pull request.

phoenixide commented 3 months ago

Thank You for making this pull request.

phoenixide commented 3 months ago

Thank You for making this pull request.

phoenixide commented 3 months ago

Thank You for making this pull request.

phoenixide commented 3 months ago

Thank You for making this pull request.

sonarcloud[bot] commented 3 months ago

Quality Gate Passed Quality Gate passed

Issues
5 New issues
0 Accepted issues

Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code

See analysis details on SonarCloud